我使用laravel并希望使用内置的身份验证系统。 一个人应该可以使用他/她的ldap帐户登录我的应用程序。我不想将ldap用户复制到本地数据库。 所以我写了一个自定义UserProvider,我登录到ldap服务器:
class LdapAuthProvider implements UserProvider
{
public function retrieveByCredentials (array $credentials)
{
// try to connect with given username
$ldap = new \Adldap\Adldap();
$ldap->addProvider ( [
// config stuff based on $credentials ...
] );
try {
$ldap->connect();
return new \App\User (['id': $credentials['username']]);
}
catch (\Adldap\Auth\BindException $e) {
return NULL;
}
}
然后在引导方法
中将其注册到AuthServiceProvider中Auth::provider ('ldap', function($app)
{
return new LdapAuthProvider;
});
当我使用正确的用户名和密码从我的LoginController调用Auth::attempt
时,该函数返回true。但在重定向到另一个页面后,Auth::check
返回false,因此它不会存储在我已成功登录的会话中。
我的config / auth.php看起来像这样
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'ldap',
'model' => App\User::class,
],
使用Session::put()
在会话中手动存储数据可以正常工作。
为了让用户在重定向到另一个页面后保持登录,我该怎么办?