Laravel 8:参数2传递给IlluminateAuthSessionGuard::__construct()必



我正在尝试为我的应用程序的用户和管理员创建多个保护身份验证。在你把它标记为副本或其他之前,请阅读它并让别人帮助我。我已经尝试了所有可能的解决方案,但到目前为止都没有效果。

下面是我的代码:

auth.php

'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
'admin' => [
'driver' => 'session',
'providers' => 'admins'
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => AppModelsUser::class,
],
// 'users' => [
//     'driver' => 'database',
//     'table' => 'users',
// ],
'admins' => [
'driver' => 'eloquent',
'model' => AppModelsAdminUser::class,
],
],

AdminUser.php

namespace AppModels;
use IlluminateContractsAuthMustVerifyEmail;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateNotificationsNotifiable;
use IlluminateDatabaseEloquentModel;

class AdminUser extends Authenticatable
{
use HasFactory, Notifiable;
protected $table = 'admin_users';
protected $guard = 'admin';
protected $fillable = [
'first_name',
'middle_name',
'last_name',
'email',
'password',
];

protected $hidden = [
'password',
'remember_token',
];

protected $casts = [
'email_verified_at' => 'datetime',
];
}

AdminAuthController.php

class AdminAuthController extends Controller {
public function __construct()
{
$this->middleware('auth:admin');
}
public function getLogin()
{
return view('login');
} 
}

web.php

Route::get('/login', 'LoginController@index')->name('login');
Route::get('/admin/login','AdminAuthController@getLogin');

当我进入my-application/login它要求用户名和密码,并允许我在身份验证后进入。但是当我进入my-application/admin/login,它给我这个错误:

参数2传递给IlluminateAuthSessionGuard::__construct()必须是一个实例IlluminateContractsAuthUserProvider, null给定,在/var/www/vhosts/my-application/httpdocs/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php中124行调用

我尝试了同样问题的解决方案,但没有任何帮助。Laravel文档有点混乱,所以我在这里寻求您的帮助。请帮助我,我提前感谢你的帮助。我使用的是Laravel 8 *

我昨天才遇到这个问题。对于web开发,我还是个新手。原来问题是由我的config/auth.php引起的。在设置"守卫"时;节中,我将提供程序设置为引用表名('provider' =>'admins_user')而不是"providers"('provider' =>"管理员")。解决方案:当我把警卫指给"供应商"时;节,它被解决了。我知道这对我来说是个愚蠢的错误,但我希望这能帮助到有类似情况的人。

最新更新