#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. Тем не менее, я был бы признателен, если бы попробовал и это. Пожалуйста, предложите, какой код, по вашему мнению, я должен использовать.