#cakephp #cakephp-4.x
Вопрос:
Я пытаюсь перенаправить на текущую страницу после успешного входа в систему, но, похоже, я сталкиваюсь со слишком большим количеством перенаправлений… Мой пользовательский контроллер работает под префиксом «администратор», и я думаю, что это основная причина, но мне не удалось выполнить эту работу.
Router::prefix('Admin', function(RouteBuilder $builder) { $builder-gt;connect('/', ['controller' =gt; 'Pages', 'action' =gt; 'index']); $builder-gt;fallbacks(DashedRoute::class); });
Моя функция инициализации в AppController выглядит следующим образом
public function initialize() { parent::initialize(); $this-gt;loadComponent('RequestHandler'); $this-gt;loadComponent('Flash'); $this-gt;loadComponent('Auth', [ 'loginAction' =gt; [ 'controller' =gt; 'Users', 'action' =gt; 'login', 'prefix' =gt; 'admin' ], 'unauthorizedRedirect' =gt; $this-gt;referer(), 'logoutRedirect' =gt; [ 'controller' =gt; 'Users', 'action' =gt; 'login', 'prefix' =gt; 'admin' ] ]); }
и вот если действие войти
public function login() { $this-gt;request-gt;allowMethod(['get', 'post']); $result = $this-gt;Authentication-gt;getResult(); if ($result-gt;isValid()) { return $this-gt;redirect($this-gt;Auth-gt;redirectUrl()); } // display error if user submitted and authentication failed if ($this-gt;getRequest()-gt;is("post") amp;amp; !$result-gt;isValid()) { $this-gt;Flash-gt;error('Email ou mot de passe incorrect.'); } $this-gt;viewBuilder()-gt;setLayout('AdminTheme.login'); }
Спасибо за вашу помощь.
Ответ №1:
Я думаю, что проблема в первом блоке if:
if ($result-gt;isValid()) { //This is the problem return $this-gt;redirect($this-gt;Auth-gt;redirectUrl()); }
Я полагаю, что вы хотите перейти $this-gt;request-gt;referer()
к redirect
методу вместо $this-gt;Auth-gt;redirectUrl()
этого . Референт-это предыдущий URL-адрес.
Ответ №2:
Я использовал функцию getLoginRedirect(), которая, похоже, работает.
if ($result-gt;isValid()) { $target = $this-gt;Authentication-gt;getLoginRedirect() ?? '/'; return $this-gt;redirect($target); }