Действие входа пользователя не работает, показывая неверные имя пользователя и пароль в CakePHP3

#cakephp-3.0

#cakephp-3.0

Вопрос:

Я пытаюсь реализовать функциональность входа в систему в CakePHP3, следуя всем предписанным способам. Я уже перепробовал много альтернатив, кроме основного метода, найденного на странице аутентификации официального сайта Cake.

Ошибка, которую я получаю, — это «Неверное имя пользователя или пароль». Ниже приведен снимок кода, который я использовал. Пожалуйста, обратите внимание, я следовал правилам именования CakePHP, поэтому проблем с конфигурацией быть не должно. Кроме того, проблема в версии 3.x, поэтому, пожалуйста, не отвечайте за более старые версии.

Файл: UsersController> Действие входа

 public function login() {
    if($this->Auth->user()){
        $this->Flash->error(__('You are already logged in!'));
            return $this->redirect($this->Auth->redirectUrl());
    }
    if ($this->request->is('post')) {
        $user = $this->Auth->identify();
        if ($user) {
            $this->Auth->setUser($user);
            $this->Flash->success(__('You're successfully logged-in.'));
            return $this->redirect($this->Auth->redirectUrl());
        }
        $this->Flash->error(__('Username or password is incorrect'));
    }
}
  

Файл: AppController> Инициализировать функцию

 public function initialize()
{
    parent::initialize();
    $this->loadComponent('Flash');
    $this->loadComponent('Auth', [
        'loginAction' => [
            'controller' => 'Users',
            'action' => 'login',
        ],
        'authError' => 'Did you really think you are allowed to see that?',
        'authenticate' => [
            'Form' => [
                'fields' => ['username' => 'username']
            ]
        ],
        'storage' => 'Session'
    ]);
    $this->Auth->allow(['display']);
    $this->Auth->allow(['register']);
}
  

Файл: Представление входа

 <?php
echo $this->Form->create();
    echo $this->Form->input('username');
    echo $this->Form->input('password');
    echo $this->Form->button('Login', ['class' => 'btn']);
echo $this->Form->end();
?>
  

Надеюсь, я ничего не пропустил, но все равно он работает не так, как предполагалось.
Любое предложение будет оценено.

TIA

Ответ №1:

Он не работает без пароля в компоненте аутентификации. Вы должны добавить его в /src/Model/Entity/User.php

Добавьте приведенный ниже код в конце. Также добавьте использовать Cake Auth DefaultPasswordHasher;

 protected function _setPassword($value){
        $hasher = new DefaultPasswordHasher();
        return $hasher->hash($value);
    }
  

После этого добавьте нового пользователя и попробуйте войти с ним.

Комментарии:

1. Да. Это работает нормально, но теперь я не могу проверить статус входа в систему, используя приведенный ниже код: if($this-> Auth-> user()){ $this-> Flash-> ошибка (__(‘Вы уже вошли в систему!’)); return $this-> перенаправить($this-> Auth-> redirectUrl()); }

2. Чувак, проигнорируй мой предыдущий комментарий. На самом деле, я пытался использовать этот код (проверка статуса входа) в AppController, в то время как я должен использовать его в UsersController. Спасибо!

3. Есть ли какая-либо ошибка, которую вы получаете? Режим отладки должен быть включен.

4. Пока ошибок нет. Прокомментирует, если код застрянет где-нибудь. n Спасибо, приятель! 🙂

5. @6924563 @vipul-patel: я использую JWT auth в CakePHP 3.7 для аутентификации в моем приложении для Android . И строка $this->Auth->identify() всегда возвращается false . Не могли бы вы подсказать, почему это происходит?

Ответ №2:

Использует ли ваша пользовательская сущность DefaultPasswordHasher в файле src/Model/Entity/User.php ? Просто мысль…

Комментарии:

1. Нет. Но я думаю, это не требуется до тех пор, пока я не зашифрую пароль с помощью PasswordHasher. Тем не менее, я был бы признателен, если бы попробовал и это. Пожалуйста, предложите, какой код, по вашему мнению, я должен использовать.