#cakephp-3.0
#cakephp-3.0
Вопрос:
Проблема, связанная с входом в систему с использованием аутентификации в cakephp3
$this->loadComponent('Auth', [
'loginRedirect' => [
'controller' => 'Articles',
'action' => 'index'
],
'logoutRedirect' => [
'controller' => 'Pages',
'action' => 'display',
'home'
]
]);
это позволяет мне использовать имя пользователя только по умолчанию, хорошо, если я хочу войти в систему с помощью электронной почты, которую я искал и получил это:
UserController.php
public function login()
{
if ($this->request->is('post'))
{
$this->Auth->config('authenticate', [
'Form' => [
'fields' => ['username' => 'email']
]
]);
$this->Auth->constructAuthenticate();
$this->request->data['email'] = $this->request->data['username'];
unset($this->request->data['username']);
$user = $this->Auth->identify();
if ($user)
{
$this->Auth->setUser($user);
return $this->redirect($this->Auth->redirectUrl());
}
$this->Flash->error(__('Invalid username or password, try again'));
}
}
Я могу изменить поля с имени пользователя на адрес электронной почты и восстановить его, но что, если я захочу войти в систему с ID
помощью field.
$this->Auth->config('authenticate', [
'Form' => [
'fields' => ['username' => 'id']
]
]);
Если я перейду с адреса электронной почты на идентификатор, это не позволит мне войти в систему. Должен ли я вместо этого использовать запросы then?
Ответ №1:
У меня только что была такая же проблема, и я решил ее так, используя CakePHP 3.3
Ваш AppController
$this->loadComponent('Auth', [
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'email',
]
]
],
'loginAction' => [
'controller' => 'Users',
'action' => 'login'
],
'unauthorizedRedirect' => $this->referer(),
'loginRedirect' => [
'plugin' => false,
'controller' => 'Pages',
'action' => 'home',
],
]);
Ваш пользовательский контроллер (действие входа)
/**
* @return Response|null
*/
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('Your username or password is incorrect.');
}
}
Ваши основные пользователи / шаблон login.ctp
<?= $this->Form->create() ?>
<?= $this->Form->input('email') ?>
<?= $this->Form->input('password') ?>
<?= $this->Form->button('Login') ?>
<?= $this->Form->end() ?>
Ответ №2:
Ваша проблема в том, что когда вы изменили поле «email» на «id» в приведенном ниже коде,
`('authenticate', ['Form' => ['fields' => ['username' => 'id']]]);`
вы должны были изменить поле ввода вашего представления «login.ctp».
из этого: <?= $this->Form->input('email') ?>
для этого: <?= $this->Form->input('id') ?>