使用 Symfony 的 Action Security,如果用户未被识别,他将被转发到应用程序 settings.yml 文件中定义的默认登录操作。用户成功通过身份验证后,如何将用户转发到最初请求的操作?
Alex Parish
问问题
5851 次
3 回答
8
在第一次点击您的登录操作时,将引用存储到用户会话:
if(!$this->getUser()->hasParameter('referer'))
{
$this->getUser()->setParameter('referer',$this->getRequest()->getReferer());
}
然后当登录成功时,将用户重定向到存储的引用者:
$this->redirect($this->getUser()->getParameter('referer'));
您在 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 回答