首页 > 解决方案 > 更改 Laravel 中的默认身份验证保护名称

问题描述

Laravel 中默认的身份验证保护名称是“web”,但我发现这很混乱,因为它的提供者是“用户”。特别是因为对于管理员守卫来说,名称是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登录时出现错误。将其从更改为 是一个坏主意webuser

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

这篇文章中,它描述了可以做我想要实现的目标。

标签: phplaravel

解决方案


我认为发生这种情况是因为在默认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'));
}

推荐阅读