通过用户会话认证的Laravel API路由 - php

我已经开始研究现有的Laravel 5.2项目。我需要为应用程序的前端构建一些基本的API请求,以与数据库进行通信。这些路由需要通过用户会话进行身份验证。

我尝试使用auth:api驱动程序设置中间件,并在../config/auth.php中将api ['driver']设置为'session'。但是,即使用户已通过所有权限和角色进行身份验证,我仍会不断将302重定向到登录页面。

有人可以推荐一些有关如何基于用户会话实现API身份验证的阅读或其他解决方案的想法吗?

从routes / api.php:

Route::group(["middleware" => ["auth:api"]], function () {
    // results in 302 redirect to /login
    Route::get('test', function(){
        return "TEST";
    });    

});

从config / auth.php

'guards' => [
'web' => [
    'driver' => 'session',
    'provider' => 'users',
],

'api' => [
    'driver' => 'session',
    'provider' => 'users',
],

app / Http / Kernel.php

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \App\Http\Middleware\NoCache::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'role' => \Zizaco\Entrust\Middleware\EntrustRole::class,
        'permission' => \Zizaco\Entrust\Middleware\EntrustPermission::class,
        'ability' => \Zizaco\Entrust\Middleware\EntrustAbility::class,
        'dashboard' => \App\Http\Middleware\dashboardMiddleware::class,
        'system' => \App\Http\Middleware\systemMiddleware::class
    ];
}

参考方案

问题是您没有在请求中传递任何身份验证标头,因此,即使您使用邮递员访问API,很显然,它会将您重定向到登录屏幕。

为了证明这一点,请尝试从路由文件中的以下行auth中删除​​Route::group(["middleware" => ["auth:api"]], ...中间件,如果您打了测试路由,您应该能够获得TEST作为响应。另外,请记住,我们的api会自动将api /前缀绑定到所有api路由。因此,您应该向/api/test发出请求,并且应该返回TEST。

如果要在您的api中包含身份验证,请阅读Laravel's Passport docs。如果您想要更简单的方法,请从docs中的OnceBasic Auth中间件开始。

我希望这能为您指出正确的方向!

如果您还有其他问题,请告诉我。

干杯!

验证IBAN PHP - php

在设计新平台时,我们尝试集成IBAN编号。我们必须确保IBAN已经过验证,并且存储在数据库中的IBAN始终正确。那么验证数字的正确方法是什么? 参考方案 正如我在其他问题中解释的逻辑一样,我尝试自己创建一个函数。根据Wikipedia文章中解释的逻辑,在下面找到合适的功能。国家特定验证。它适合吗http://en.wikipedia.org/wiki/Int…

preg_replace排除<a href='''> </a> PHP - php

我正在使用preg_replace来替换带有href标签的文本中的关键字,我的正则表达式工作非常好,现在我的代码是:$newstring2 = preg_replace("/\p{L}*?".preg_quote($match[$i])."\p{L}*/ui", "<a href='"…

PHP:对数组排序 - php

请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…

PHP:不推荐使用password_hash的'salt'选项 - php

我正在使用密码哈希进行注册。我需要手动创建Salt,以下是我使用的代码:$options = [ 'cost' => 11, 'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM) ]; $password = password_hash( $this->…

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…