Попытка создать простой 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']);

Итак... После удаления все прошло нормально. Спасибо вам за все ваши ответы!

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