2015-10-08 79 views
0

我正在使用cakephp v3。我已啓用身份驗證。假設我想讓一個名爲「XXX」的用戶在不使用密碼的情況下登錄。我在UsersController.php中有以下login()函數。如何修改它以允許名爲「XXX」的用戶無需輸入密碼即可登錄?允許某些用戶在不輸入密碼的情況下登錄cakephp

public function login() 
{ 
    if ($this->request->is('post')) { 
     $user = $this->Auth->identify(); 
     if ($user) { 
      $this->Auth->setUser($user); 
      return $this->redirect($this->Auth->redirectUrl()); 
     } 
     $this->Flash->error(__('Invalid username or password, try again')); 
    } 
} //public function login() 
+2

只需檢查發佈的用戶名是否爲'XXX',如果是,則從數據庫中取出用戶而不是Auth-> identify。如果蛋糕是明智的,那麼將用戶對象從DB ORM傳遞到Auth-> setUser也應該可以。免責聲明:從未使用過的蛋糕3 – JimL

+2

老實說這是一個嚇人的愚蠢的想法,並打開一個安全漏洞。例如,運行一段時間的死簡單的字典攻擊*可能*發現此帳戶名稱,如果它不是像UUID那樣的字符串。如果這個特定的用戶懶惰地輸入密碼,我懷疑這很複雜。我會添加至少一個機制,在短時間內防止登錄嘗試並記錄它們。 – burzum

+0

我同意你的意見。如果用戶堅持不顧警告(減去愚蠢的言論),則無法提供幫助。 – user781486

回答

1

像這樣的東西應該可能工作。只要確保使用正確的方法爲用戶名獲取正確的參數,對於數據庫中的用戶同樣如此。

public function login() 
{ 
    if ($this->request->is('post')) { 
     $username = $this->request->data['username']; 

     if (username === 'XXX') { 
      $user = TableRegistry::get('Users')->find()->where(['username' => $username]); 
     } else { 
      $user = $this->Auth->identify(); 
     } 

     if ($user) { 
      $this->Auth->setUser($user); 
      return $this->redirect($this->Auth->redirectUrl()); 
     } 
     $this->Flash->error(__('Invalid username or password, try again')); 
    } 
} 
+0

謝謝。 Upvoted。請問$ user = TableRegistry :: get('Users') - > find() - > where(['username'=> $ username])的用途是什麼? – user781486

+1

@ user768421使用orm從db中獲取用戶。 http://book.cakephp.org/3.0/en/orm.html – JimL

+0

代碼看起來不錯。但有一些錯誤信息。 http://pastebin.com/spsq7jMn – user781486

相關問題