Не удается войти в систему, $this->Auth->>identify() всегда ложно

#php #cakephp #cakephp-3.0

Вопрос:

Еще одна проблема с $this->Auth->>identify() всегда ложна и не может войти в систему.

Что было проверено:

  • соответствующие поля были настроены для аутентификации (т. е. адрес электронной почты и пароль)
  • длина поля пароля составляет 255 символов
  • когда пользователь был добавлен, пароль был хэширован, т. е. в настоящее время: «$2y$10$oTWUNx.kxONCecn8pMuI2uX0ZEyDbTgoNI8Gw36iz4Ep18lDqGi12»

Конфигурация является:

  • Windows 10
  • Версия XAMPP: 7.4.12
  • Версия PHP 7.4.12
  • Apache/2.4.46 (Win64) OpenSSL/1.1.1 h PHP/7.4.12
  • 10.4.16-МариаДБ
  • CakePHP 3.9

Я следовал учебнику по CMS здесь: https://book.cakephp.org/3/en/tutorials-and-examples/cms/authentication.html

AppController.php

 //Setting up Authentication
$this->loadComponent('Auth', [
    'authenticate' => [
        'Form' => [
            'fields' => [
                'username' => 'email',
                'password' => 'password'
            ]
        ]
    ],
    'loginAction' => [
        'controller' => 'Users',
        'action' => 'login'
    ],
    'storage' => 'Session',
    // If unauthorized, return them to page they were just on
    'unauthorizedRedirect' => $this->referer()
]);
 

логин.ctp

 <div class="users form">
<?= $this->Flash->render('auth') ?>
    <?= $this->Form->create('User') ?>
    <fieldset>
        <legend><?= __('Please enter your username and password') ?></legend>
        <?= $this->Form->control('username') ?>
        <?= $this->Form->control('password') ?>
    </fieldset>
    <?= $this->Form->button(__('Login')); ?>
    <?= $this->Form->end() ?>
</div>
 

UsersController.php

 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 credentials, try again'));
    }
}
 

User.php

 protected function _setPassword($value)
{
    if (strlen($value)) {
        $hasher = new DefaultPasswordHasher();

        return $hasher->hash($value);
    }
}
 

Структура SQL

 CREATE TABLE `users` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `first_name` varchar(100) NOT NULL,
 `last_name` varchar(100) NOT NULL,
 `email` varchar(255) NOT NULL,
 `password` varchar(255) NOT NULL,
 `created` datetime DEFAULT NULL,
 `modified` datetime DEFAULT NULL,
 `created_by` int(11) unsigned DEFAULT NULL,
 `modified_by` int(11) unsigned DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2
 

Ответ №1:

Ваша форма запрашивает a username , но ваша аутентификация настроена на использование этого email поля для этого. Измените $this->Form->control('username') на $this->Form->control('email', ['label' => 'Username']) .