Symfony Action Security - 成功验证后如何转发?

时间:2008-12-11 09:28:22

标签: php security symfony1 action

使用Symfony的Action Security如果用户尚未被识别,他将被转发到application settings.yml文件中定义的默认登录操作。在用户成功通过身份验证后,如何将用户转发到最初请求的操作?

3 个答案:

答案 0 :(得分:8)

首次点击您的登录操作时,将referer存储到用户会话:

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

然后当登录成功时,将用户重定向到存储的referer:

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

你在sfGuardPlugin中有完整的例子:

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

答案 1 :(得分:1)

更简单......

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

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

答案 2 :(得分:0)

相关问题,而是尝试从不同的行动中执行前进:

如果你有一个受sfGuard保护的行动试图重定向到推荐人,你将在登录后获得一个重定向循环。这是因为sfGuard的登录页面将成为推荐者。如果存储在如上所述的登录操作中,则可以将参数或属性保存在多个请求中,这意味着如果已经登录,操作可能会重定向到不正确的页面。解决方案是使用将被遗忘的闪存。这可以通过sfGuardAuthActions的executeSignin方法中的以下代码来完成:

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

通过重置第一个块中的闪存,在登录尝试之间不会忘记,并且通过使用闪存,从其他页面登录不会干扰您的操作。