Symfony Action Security - Как пересылать после успешной аутентификации? - PullRequest
1 голос
/ 11 декабря 2008

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

Ответы [ 3 ]

8 голосов
/ 13 декабря 2008

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

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

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

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

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

http://www.symfony -project.org / плагины / sfGuardPlugin

1 голос
/ 09 сентября 2009

Проще ...

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

как

setReferer($referer)
{
  if (!$this->hasAttribute('referer'))
    $this->setAttribute('referer', $referer);
}
0 голосов
/ 28 июля 2011

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

Если у вас есть действие, защищенное 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());
}

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

...