更改Laravel中的默认身份验证防护名称

时间:2019-11-24 20:28:24

标签: php laravel

Laravel中的默认身份验证保护名称为“ web”,但由于提供者为“ users”,因此我感到困惑。特别是因为对于管理员来说,名称是admin,而提供者是admins(我正在Nova中使用它)。我正在使用Laravel 6.5.2。

所以我想改变这个。在我的config/auth中,我有:

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

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

     'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ]
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class,
    ],

    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Models\Admin::class,
    ],
],

App\Models\User中,我有

protected $guard = 'user';

App\Http\Controllers\Auth\LoginController中,我有

public function __construct()
{
    $this->middleware('guest')->except('logout');
    $this->middleware('guest:user')->except('logout');
    $this->middleware('guest:admin')->except('logout');
}

现在登录时出现错误Auth guard [web] is not defined。将其从web更改为user是一个坏主意吗?

我发现设置守卫非常混乱,因为您可以在以下位置定义内容:

  • config / auth
  • 在模型(protected $guard = 'guard_name';)中
  • 根据Laravel文档(受保护的function guard() { return Auth::guard('guard-name');}),在LoginController,RegisterController和ResetPasswordController中

this article中描述了有可能做我想达到的目标。

1 个答案:

答案 0 :(得分:0)

我认为之所以会这样,是因为在默认的app/Providers/Route service provider.php类中,有一种方法将roites/web.php文件注册到web中间件中。您还应该在此处更改中间件名称:

protected function mapWebRoutes()
{
    Route::middleware('web')
         ->namespace($this->namespace)
         ->group(base_path('routes/web.php'));
}