Плагин аутентификации Cakephp 3, URL для входа не совпадают
Я хочу использовать плагин аутентификации для CakePHP 3.8, но у меня возникли проблемы, которых нет в документации.
После прохождения "Начало работы" (https://book.cakephp.org/authentication/1/en/index.html) у меня есть один вопрос.
Первоначально поля $ были указаны для изменения отношения имени пользователя и пароля в реальной базе данных, так же, как компонент Auth, а URL-адрес входа - это место, где загружается форма входа.
Во-первых, в начале работы или в какой-либо части документации не говорится о представлении (форме) входа в систему, поэтому, как и старый компонент Auth, я создал его в Users/login.ctp
<div class="users form">
<?= $this->Flash->render('auth') ?>
<?= $this->Form->create() ?>
<fieldset>
<legend><?= __('Please enter your email and password') ?></legend>
<?= $this->Form->input('email') ?>
<?= $this->Form->input('password') ?>
</fieldset>
<?= $this->Form->button(__('Login')); ?>
<?= $this->Form->end() ?>
</div>
Мой код в Application.php включает это (с соответствующими вариантами использования и реализацией):
public function getAuthenticationService(ServerRequestInterface $request, ResponseInterface $response)
{
$service = new AuthenticationService();
$fields = [
'username' => 'email',
'password' => 'password'
];
// Load identifiers
$service->loadIdentifier('Authentication.Password', compact('fields'));
// Load the authenticators, you want session first
$service->loadAuthenticator('Authentication.Session');
$service->loadAuthenticator('Authentication.Form', [
'fields' => $fields,
'loginUrl' => '/users/login'
]);
return $service;
}
Но когда я пытаюсь войти в систему, у меня появляется эта ошибка, после var_dump в login.ctp я получаю следующее:
object(Authentication\Authenticator\Result)[124]
protected '_status' => string 'FAILURE_OTHER' (length=13)
protected '_data' => null
protected '_errors' =>
array (size=1)
0 => string 'Login URL `http://localhost/users/login` did not match `/users/login`.' (length=70)
Если я прокомментирую 'loginUrl' => '/users/login'
строка, то логин работает нормально.
Дополнительные примечания:
- Я тестировал хешированные пароли и пароли с текстовой панелью, результаты те же.
- Я добавил$this->Authentication->allowUnauthenticated(['view', 'index', 'login', 'add']);
в beforeFilter для доступа к логину.
- Это чистая установка cakephp 3.8, только база данных такая же для тестов.
- Я добавил Crud только с консолью для торта.
Я хотел бы узнать больше об этом loginURL, я должен включить некоторые варианты использования в UsersController? Что вызывает эту ошибку?
Спасибо
1 ответ
Сообщения об ошибках в настоящее время немного вводят в заблуждение, так как они не показывают вам возможный базовый каталог, который является реальной проблемой, с которой вы столкнулись. Я предложил исправление для этого, которое может быть внесено в следующий выпуск.
Когда ваше приложение находится в подкаталоге, вам нужно убедиться, что ваша конфигурация URL-адреса входа учитывает это, то есть путем передачи URL-адреса, включая базовый каталог, что вы можете сделать вручную:
'loginUrl' => '/myapp/users/login'
или с помощью роутера:
'loginUrl' => \Cake\Routing\Router::url('/users/login')
'loginUrl' => \Cake\Routing\Router::url([
'plugin' => null,
'prefix' => null,
'controller' => 'Users',
'action' => 'login'
])
Другой вариант - использовать средство проверки URL-адресов на основе маршрутов, которое можно настроить с помощью аутентификаторов форм. urlChecker
вариант, то вы можете определить URL-адрес для входа с помощью массивов URL-адресов без использования маршрутизатора:
'urlChecker' => 'Authentication.CakeRouter',
'loginUrl' => [
'plugin' => null,
'prefix' => null,
'controller' => 'Users',
'action' => 'login'
]
Смотрите также: