#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'])
.