Аутентификация формы 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');
      }
}

Вокруг него намного больше кода, и я уверен, что все правильно понял. Дайте мне знать, если вам нужно больше. Я стремлюсь взломать это.

заранее спасибо.

0 ответов

Другие вопросы по тегам