laravel默认使用哪个防护进行身份验证?

时间:2020-01-31 17:01:11

标签: php laravel laravel-5

我已经使用默认的laravel配置进行了简单的身份验证。 我的默认防护设置为web防护。

 'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

我的身份验证工作正常。现在,当我放置这条路线时。

 Route::group(['middleware' => ['auth']], function () {

    // Users
    Route::get('users/me', 'UserController@me')->name('users.me'); 

   //...below routes.

此路由返回异常unauthenticated。 但是,当我在中间件中以auth:api的身份通过防护时,它就起作用了。 因此,我只想知道我的用户通过了哪种保护措施。由于提到的默认值是web并且我还没有在laravel上添加guard()方法来更改防护,所以为什么它没有采用默认的Web地址呢? 是因为在api路由中提到了它吗? 如果是这样的话,当我尚未通过该保护程序对用户进行身份验证时,无论如何它与auth:api一起工作。

这是我的Web和api中间件组:

protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
        ],

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


1 个答案:

答案 0 :(得分:0)

在将身份验证中间件附加到路由时,您还可以指定应使用哪个防护对用户进行身份验证。为此,您可以在控制器的构造函数中指定

public function __construct()
{
    $this->middleware('auth:api');
}

,或者您也可以在中间件中指定。 有关信息,请参阅文档 https://laravel.com/docs/5.7/authentication