Symfony Action Security – Как выполнить пересылку после успешной аутентификации?

StackOverflow https://stackoverflow.com/questions/358772

  •  21-08-2019
  •  | 
  •  

Вопрос

С помощью Action Security Symfony, если пользователь не был идентифицирован, он будет перенаправлен к действию входа в систему по умолчанию, как определено в файле settings.yml приложения.Как мне перенаправить пользователя к первоначально запрошенному действию после успешной аутентификации пользователя?

Это было полезно?

Решение

При первом нажатии на действие входа сохраните ссылку на сеанс пользователя:

if(!$this->getUser()->hasParameter('referer'))
{
  $this->getUser()->setParameter('referer',$this->getRequest()->getReferer());
}

а затем, когда вход в систему будет успешным, перенаправьте пользователя на сохраненный реферер с помощью:

$this->redirect($this->getUser()->getParameter('referer'));

У вас есть полный пример в sfGuardPlugin:

http://www.symfony-project.org/plugins/sfGuardPlugin

Другие советы

Проще...

$this->getUser()->setReferer($this->getRequest()->getReferer());

нравиться

setReferer($referer)
{
  if (!$this->hasAttribute('referer'))
    $this->setAttribute('referer', $referer);
}

Связанная проблема, но вместо этого попытка выполнить пересылку из другого действия:

Если у вас есть действие, защищенное sfGuard, которое пытается перенаправить на реферера, после входа в систему вы получите цикл перенаправления.Это связано с тем, что страница входа в sfGuard станет реферером.Параметр или атрибут можно сохранить в нескольких запросах, если они сохранены в действии входа, как указано выше. Это означает, что действие может перенаправлять на неверную страницу, если вы уже вошли в систему.Решение — использовать вспышку, о которой вы забудете.Это можно сделать с помощью следующего кода в методе ExecuteSignin sfGuardAuthActions:

if ($this->getUser()->hasFlash('referer'))
{
  $this->getUser()->setFlash('referer', $this->getUser()->getFlash('referer'));
}
else
{   
  $this->getUser()->setFlash('referer', $this->getRequest()->getReferer());
}

Сбросив флэш в первом блоке, он не будет забыт между попытками входа в систему, а с помощью флэша вход с других страниц не сможет помешать вашим действиям.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top