2017-04-18 53 views
0

我有auth_key的問題,我有登錄表單,它的工作正常,沒有記住我和記住我,但我讀了yii文檔,在那個文檔中寫到關於記住我的工作通過ID和AUTH_KEY用於創建的cookie留用戶在很長一段時間,我檢查的框架代碼,並在那裏有三個參數(ID,AUTH_KEY,的expire_time()),我保存AUTH_KEY在用戶表和它的代碼在這裏yii2的auth_key is'nt干擾Cookie基地

public function generateAuthKey() 
{ 
    $this->auth_key = Yii::$app->security->generateRandomString(); 
} 

public function validateAuthKey($authKey) 
{ 
    return $this->getAuthKey() === $authKey; 
} 

public function getAuthKey() 
{ 
    return $this->auth_key; 
} 

但我有問題,這是如果用戶在網站登錄,我去用戶表,並更改auth_key字段,現在如果用戶刷新頁面,它必須扔掉網站,因爲它的身份驗證密鑰已更改,但用戶保持登錄網站,問題在哪裏?

回答

0

auth_key的主要用途是通過cookie對用戶進行身份驗證(用戶不必再次輸入登錄數據)。當你選擇在登錄時被記住,這就是你如何被記住。系統必須以某種方式識別並登錄您。如果你改變它,它不會註銷用戶。

+0

在文檔中說: getAuthKey():它返回一個用於驗證基於cookie的登錄的密鑰。密鑰存儲在登錄cookie中,稍後將與服務器端版本進行比較,以確保登錄cookie有效。 validateAuthKey():它實現了驗證基於cookie的登錄密鑰的邏輯。 –

+0

我怎樣才能訪問auth_key,我想終止用戶會話,如果用戶選中記住我,它創建cookie「_identity」,我想更改auth_key用戶刷新頁面後拋出面板 –

+0

是的,這就是它做得很好。基於Cookie的登錄允許用戶'autologin'在註銷時不提供登錄數據。 U不能通過此來終止用戶會話。 – Yupik

0

您可以嘗試在「ValidateAutney」方法中自己更改密鑰,但這將是一種不好的做法,最好設置會話時間。

+0

感謝我這樣做,我有保存在與AUTH_KEY正值DB會話,它解決 –

+0

excusme,你可以檢查我有問題尤皮克的意見在最後3條評論 –

0
'session' => [ 
     'class' => 'yii\mongodb\Session', 
     'writeCallback' => function($session) 
     { 
      return [ 
       'user_id' => Yii::$app->user->id, 
       'agent' => Yii::$app->request->getUserAgent(), 
       'ip' => Yii::$app->request->getUserIP(), 
       'auth_key' => Yii::$app->security->generateRandomString(), 
      ]; 
     } 
    ], 

    public function getAuthKey() 
{ 

    Yii::$app->session->open(); 

    $query = new Query(); 

    $query->select(['auth_key']) 
     ->from('cache') 
     ->where(['id'=> Yii::$app->session->id ]); 
    $row = $query->one(); 
    return $row['auth_key']; 
}