2015-10-08 48 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

相关问题