Предположим, вы были на экране списка пользователей. Оттуда вы перейдете к экрану входа, чтобы войти в систему. Там вы введете свой адрес электронной почты и пароль и нажмите кнопку отправки. Вы успешно вошли в систему. Если вход в систему выполнен успешно, мы хотим быть перенаправлены на экран со списком пользователей.
Если вы были на экране сведений о пользователе, вы будете перенаправлены на экран сведений о пользователе, нажав Если пользователь находился на экране редактирования, экран редактирования пользователя
Я прочитал документацию AuthenticationPlugin на book.cakephp.org.
Там я научился использовать getLoginRedirect()
для достижения этой функциональности.
Я знаю, что то, что я хочу сделать, произойдет после того, как я настрою шаги, описанные ниже.
Однако getLoginRedirect() возвращает null.
Что мне нужно делать? Что мне не хватает? В чем дело?
// in Application.php
public function getAuthenticationService(ServerRequestInterface $request): AuthenticationServiceInterface
{
$path = $request->getPath();
$authenticationService = new AuthenticationService([
'unauthenticatedRedirect' => '/',
'queryParam' => 'redirect', // <- I believe this is the only one that matters.
]);
// Abbreviated below....
}
// in UsersController
public function login()
{
$this->request->allowMethod(['get', 'post']);
if ($this->request->is('post')) {
$result = $this->Authentication->getResult();
$requestData = $this->request->getData();
if ($result->isValid()) {
// I want to get the original url. But null is passed.
$redirect = $this->Authentication->getLoginRedirect() ?? '/';
return $this->redirect($redirect);
}
if ($this->request->is('post') && !$result->isValid()) {
$this->Flash->error(__('メールアドレス、またはパスワードが間違っています。'));
}
}
}
Думаю, я раскрыл все, что связано с getLoginRedirect(). Если чего-то не хватает или что-то, что вам интересно, пожалуйста, дайте мне знать.
Пожалуйста, помогите мне. Пожалуйста, помогите мне...
🤔 А знаете ли вы, что...
CakePHP обеспечивает гибкую маршрутизацию URL и контроль доступа.
Функция перенаправления входа в систему, предоставляемая плагином, работает автоматически только тогда, когда вы перенаправляетесь на URL-адрес для входа после доступа к URL-адресу, требующему аутентификации, когда вы не вошли в систему. В этом случае промежуточное программное обеспечение аутентификации установит переменную строки запроса redirect
с текущим URL-адресом. , чтобы компонент мог подобрать его после перенаправления на URL-адрес входа.
Если вы вручную посещаете URL-адрес для входа, вам также необходимо вручную установить переменную строки запроса redirect
, то есть в вашем меню, где вы создаете ссылку, ведущую к входу в систему, добавьте текущий URL-адрес в строку запроса, что-то в этом роде. строки этого:
$service = $this->request->getAttribute('authentication');
// here `$queryParam` would by default be `redirect`
$queryParam = $service->getConfig('queryParam');
echo $this->Html->link('Login', [
'plugin' => null,
'prefix' => false,
'controller' => 'Users',
'action' => 'login',
'?' => [
$queryParam => $this->request->getRequestTarget(),
],
]);
Итак, если вы находитесь на /users/show
, URL-адрес ссылки для входа будет выглядеть примерно так:
/login?redirect=/users/show
и помощник формы, который создает вашу форму входа, должен выбрать этот точный URL-адрес, чтобы после отправки формы компонент проверки подлинности мог соответственно прочитать URL-адрес перенаправления из текущего URL-адреса.
Смотрите также