1

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

4

3 回答 3

8

在第一次点击您的登录操作时,将引用存储到用户会话:

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

于 2008-12-12T21:39:04.203 回答
1

更简单...

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

setReferer($referer)
{
  if (!$this->hasAttribute('referer'))
    $this->setAttribute('referer', $referer);
}
于 2009-09-09T05:27:30.173 回答
0

一个相关的问题,而是尝试从不同的操作执行转发:

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

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

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

于 2011-07-28T17:53:34.653 回答