Попытка создать простой Auth с помощью CakePHP 3.8
Как дела? Я пытаюсь понять, почему это не работает... Посмотрел в Интернете, и наиболее частые ответы заключались в том, что поле пароля моей базы данных имеет неправильный размер, но моеvarchar(255)
.
Продолжать получать false
вернуться в $user = $this->Auth->identify();
Мой код:
AppController:
[...]
public function initialize()
{
parent::initialize();
$this->loadComponent('RequestHandler', [
'enableBeforeRedirect' => false,
]);
$this->loadComponent('Flash');
$this->loadComponent('Auth', [
'loginRedirect' => [
'controller' => 'Users',
'action' => 'index'
],
'logoutRedirect' => [
'controller' => 'Users',
'action' => 'login'
],
'authError' => 'Para continuar, você precisa logar.',
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'email',
'password' => 'password'
]
]
]
]);
$this->loadComponent('Security');
}
UsersController:
[...]
use App\Controller\AppController;
use Cake\Auth\DefaultPasswordHasher;
[...]
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(__('Usuário ou senha ínvalido, tente novamente'));
}
}
public function logout()
{
return $this->redirect($this->Auth->logout());
}
Пользователь (объект модели):
[...]
protected $_hidden = [
'password',
];
protected function _setPassword($password)
{
return (new DefaultPasswordHasher)->hash($password);
}
Посмотреть:
<?= $this->Form->create('User', ['url' => ['controller' => 'Users', 'action' => 'login']]) ?>
<div class="form-group">
<label for="email">
<?= $this->Form->control('email', ['class' => 'form-control']) ?>
</label>
</div>
<div class="form-group">
<label for="password">
<?= $this->Form->control('password', ['class' => 'form-control']) ?>
</label>
</div>
<div class="form-group">
<?= $this->Form->submit('Login', ['class' => 'btn btn-info btn-md']) ?>
</div>
<?= $this->Flash->render() ?>
<?= $this->Form->end() ?>
1 ответ
Финнали выяснил, что произошло: по глупости я дважды хешировал пароль... В методе add() была такая строка кода:
$hasher = new DefaultPasswordHasher();
$user['password'] = $hasher->hash($user['password']);
Итак... После удаления все прошло нормально. Спасибо вам за все ваши ответы!