【问题标题】:Change default auth guard name in Laravel更改 Laravel 中的默认身份验证保护名称
【发布时间】:2020-03-20 04:03:10
【问题描述】:

Laravel 中默认的 auth guard 名称是 '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 是不是一个坏主意?

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

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

this article 中描述了可以做我想要实现的目标。

【问题讨论】:

  • 请尝试清除缓存php artisan cache:clear
  • 试过了,还有php artisan config:clearphp artisan view:clear,不幸的是没用。

标签: php laravel


【解决方案1】:

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

【讨论】:

  • web 更改为user 会得到Target class [user] does not exist.。我开始认为结论是改变它确实是个坏主意。
  • 是的,这只会改变我们的中间件组。
猜你喜欢
  • 2018-01-19
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 2018-02-02
  • 2017-10-23
  • 1970-01-01
  • 2016-09-07
相关资源
最近更新 更多