使用Laravel8和LDAPRecord认证用户时出现问题



我正在进行一个Laravel 8项目,该项目使用LDAP记录2.5在我的DB (MySQL 8)中的用户表通过两个Active Directory服务器之一登录用户,只是为了访问一些基本信息,如姓名,电子邮件和唯一的用户id。

我得到了初始部分工作-我得到一个成功的登录到AD和我的用户表自动同步与Active Directory数据。如果我在auth()-> try()之后执行dd(),我将得到一个看起来像正常初始化的User模型,并且users表中的相关行已经填充了它的memor_token字段。

但是,无论我是否传递一个记忆参数,都没有实际的身份验证-调用auth()->user()或auth::user()除了登录方法本身之外,在任何地方都返回null,并且调试工具栏不显示用户模型。这是我的自定义LoginController的代码:

public function store(Request $request)  {
$credentials = [
'mail' => $request->input('username').'@pio.rs',
'password' => $request->input('password'),
];
$remember = ($request->input('remember') == true) ? true : false;
auth()->shouldUse('pio');
if (auth()->attempt($credentials, $remember)) {
dd(auth()->user()); //returns working user model here
return redirect()->route('home');
} else {
auth()->shouldUse('voj');
if (auth()->attempt($credentials, $remember)) {
return redirect()->route('home');
}
}
}
这些是我的config/auth.php文件中的设置:
'defaults' => [
'guard' => 'pio',
'passwords' => 'users',
],
'guards' => [
'voj' => [
'driver' => 'session',
'provider' => 'voj',
],
'pio' => [
'driver' => 'session',
'provider' => 'pio',
],
],
'providers' => [
'voj' => [
'driver' => 'ldap',
'model' => AppLdapVojUser::class,
'database' => [
'model' => AppModelsUser::class,
'password_column' => false,
'sync_attributes' => [
'email' => 'mail',
'name' => 'cn',
],
'sync_existing' => [
'email' => 'mail',
//'operator' => 'ilike',
],
]
],
'pio' => [
'driver' => 'ldap',
'model' => AppLdapPioUser::class,
'database' => [
'model' => AppModelsUser::class,
'password_column' => false,
'sync_attributes' => [
'email' => 'mail',
'name' => 'cn',
],
'sync_existing' => [
'email' => 'mail',
//'operator' => 'ilike',
],
]
],

知道我做错了什么吗?

找到了解决方案-只需要使用middleware(['auth:pio,voj'])而不是middleware(['auth'])调用认证中间件

最新更新