Аутентификация формы cakePHP3 завершается неудачно при определении () и ручной проверке DefaultPasswordHasher ()
Я скопировал код из примеров, чтобы создать базовый экран входа в систему на основе таблицы лиц с электронной почтой и паролем. Мой 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');
}
}
Вокруг него намного больше кода, и я уверен, что все правильно понял. Дайте мне знать, если вам нужно больше. Я стремлюсь взломать это.
заранее спасибо.