2014-01-31 346 views
0

我可能不理解laravel身份验证架构,但在我看来,很难理解Auth::check()函数实际上是如何工作的,因为它没有得到任何参数作为输入。确切地说,我的问题是,函数如何知道用户正在检查什么?laravel如何检查用户是否已通过身份验证?

+0

此方法并不是要检查是否记录了特定用户名,而是要检查用户尝试连接是否已记录(或不记录)。因此,即使加载页面的用户使用其他人的凭证登录,该方法也会返回true。 – bastienbot

+1

看这页.'http:// net.tutsplus.com/tutorials/php/authentication-with-laravel-4 /' –

回答

1

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

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

如有用户登录或空;如果没有登录Auth::user()返回用户实例功能,因此,它不检查谁在,但它登录只检查是否有用户登录。

每当该应用程序在用户登录时,Auth::login()功能做到这一点,首先

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

此代码是不言自明的,它只是更新session,这里$user->getAuthIdentifier()返回登录的主键用户和Auth::updateSession()功能简单地运行此

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

这里,$this->getName()返回正被用作一个md5串3210和$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) 
登录
相关问题