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中,它描述了我试图实现的事情是可能的。
3条答案
按热度按时间jc3wubiy1#
1.更改应用程序/App/
1.在LoginController.php上重新定义**guard()**函数
uubf1zoe2#
如果你使用的是sancutum,请确保添加
'guard' => 'user',
添加到
sanctum.php
配置文件中。然后需要运行
php artisan config:cache
hs1ihplo3#
我认为发生这种情况是因为在默认的
app/Providers/Route service provider.php
类中,有一个方法将您的roites/web.php
文件注册到web
中间件。您还应该在此处更改中间件名称: