簡體   English   中英

laravel如何檢查用戶是否通過身份驗證?

[英]How does laravel check if users are authenticated?

我可能不了解laravel身份驗證體系結構,但是在我看來,很難理解Auth::check()函數的實際工作方式,因為它沒有獲取任何參數作為輸入。 准確地說,我的問題是,該功能如何知道用戶在檢查什么?

實際上, 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()返回一個用作keymd5字符串,而$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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM