laravel如何检查用户是否经过身份验证?

时间:2014-01-31 07:45:56

标签: php authentication laravel

我可能不了解laravel身份验证体系结构,但在我看来很难理解Auth::check()函数如何实际工作,因为它不会将任何参数作为输入。确切地说,我的问题是,该功能如何知道用户正在检查什么?

1 个答案:

答案 0 :(得分:1)

实际上,Auth::check()有以下代码

public function check()
{
    return ! is_null($this->user());
}

如果有任何用户登录,函数Auth::user()将返回用户实例;如果没有用户登录则返回null。因此,它不会检查谁登录但它只检查是否有用户登录。

每当用户登录应用程序时,Auth::login()函数首先执行此操作

$this->updateSession($id = $user->getAuthIdentifier());

此代码不言自明,只更新session,此处$user->getAuthIdentifier()返回登录用户的主键,Auth::updateSession()函数只运行此

$this->session->put($this->getName(), $id);

此处,$this->getName()返回md5字符串,该字符串用作key$id是登录用户ID,因此它只是将用户ID放入与密钥相关联的会话(唯一md5字符串)。

所以,实际上Auth::check()触发了Auth::user()函数,该函数主要检查会话中是否有md5密钥,如果会话中有key,那么它包含一个整数值,即用户ID。

该密钥类似于此login_82e5d2c56bdd0811318f0cf078b78bfc,如果有任何用户登录,它可能包含用户ID的整数值。

这是用户登录时的会话数据示例

array (size=4)
    '_token' => string 'CmHN90G2sVWvejx9r6MMo8AU2dhhV8z9BJQPzATt' (length=40)
    'flash' => 
        array (size=2)
            'old' => array (size=0) empty
            'new' => array (size=0)   empty
        'login_82e5d2c56bdd0811318f0cf078b78bfc' => int 1 <-- current user id
        '_sf2_meta' => 
            array (size=3)
                'u' => int 1391189690
                'c' => int 1391187210
                'l' => string '0' (length=1)