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

x7yiwoj4  于 2023-01-29  发布在  PHP
关注(0)|答案(3)|浏览(151)

Laravel中默认的auth guard名称是“web”,但我发现这很混乱,因为它的提供者是“users”。特别是因为管理员guard的名称是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文档(受保护function guard() { return Auth::guard('guard-name');}),在登录控制器、注册控制器和重置密码控制器中

this article中,它描述了我试图实现的事情是可能的。

jc3wubiy

jc3wubiy1#

1.更改应用程序/App/

protected $namespaceUser = 'App\Http\Controllers\User';

public function boot()
{
   ...

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

        ...
    });
}

1.在LoginController.php上重新定义**guard()**函数

protected function guard()
{
   return Auth::guard('user');
}
uubf1zoe

uubf1zoe2#

如果你使用的是sancutum,请确保添加
'guard' => 'user',
添加到sanctum.php配置文件中。
然后需要运行php artisan config:cache

hs1ihplo

hs1ihplo3#

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

相关问题