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
是一个坏主意吗?
我发现设置守卫非常混乱,因为您可以在以下位置定义内容:
protected $guard = 'guard_name';
)中function guard() { return Auth::guard('guard-name');}
),在LoginController,RegisterController和ResetPasswordController中在this article中描述了有可能做我想达到的目标。
答案 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'));
}