我从示例中复制代码,以基于具有电子邮件和密码的表格个人创建基本登录屏幕。我的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');
}
}
还有更多的代码,我非常有信心我已经做对了。如果您需要更多,请告诉我。我很想解决这个问题。
提前感谢。