Перенаправление CakePHP на текущую страницу после входа в систему

#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);  }