Laravel - 自定义身份验证登录

时间:2017-12-04 16:34:01

标签: laravel ldap

我使用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()在会话中手动存储数据可以正常工作。

为了让用户在重定向到另一个页面后保持登录,我该怎么办?

0 个答案:

没有答案