cakePHP3表单身份验证在identify()和手动DefaultPasswordHasher检查()上失败

时间:2018-01-02 10:56:56

标签: authentication cakephp cakephp-3.4

我从示例中复制代码,以基于具有电子邮件和密码的表格个人创建基本登录屏幕。我的AppController有这个:

$this->loadComponent('Auth', [
            'authenticate' => [
                'Form' => [
                    'fields' => ['username' => 'email', 'password' => 'password'],
                    'userModel' => 'Individuals']
                ],
                'loginAction' => [
                    'controller' => 'Individuals',
                    'action' => 'login'
                ],
                'loginRedirect' => [
                    'controller' => 'Associations',
                    'action' => 'login'
                ],
                'logoutRedirect' => [
                    'controller' => 'Association',
                    'action' => 'login',
                    'home'
                ]
            ]);

密码重置是通过电子邮件发送给用户的令牌完成的。控制器保存未加密的值,并且/src/Model/Entity/Individual.php具有_setPassword,以确保数据库具有加密值。相同密码的每次保存都不同,但我认为这是正常的。

protected function _setPassword($password) {
        if (strlen($password) > 0) {
            return (new DefaultPasswordHasher)->hash($password);
        }
    }

我的登录功能以标准内容开头,但总是返回false

$user = $this->Auth->identify();

我的登录功能现在有这个调试代码总是得到“不匹配”

debug($this->request->data);
$email = $this->request->data['email'];
$pwd = $this->request->data['password'];
$user = $this->Individuals->find()
        ->select(['Individuals.id', 'Individuals.email', 'Individuals.password'])
        ->where(['Individuals.email' => $email])
        ->first();

if ($user) {
      if ((new DefaultPasswordHasher)->check($pwd, $user->password)) {
           debug('match');
      }
      else{
          debug('no match');
      }

      if ($user->password == (new DefaultPasswordHasher)->hash($pwd)) {
          debug('match2');
      }
      else {
          debug('no match2');
      }
}

还有更多的代码,我非常有信心我已经做对了。如果您需要更多,请告诉我。我很想解决这个问题。

提前感谢。

0 个答案:

没有答案