使用Symfony的Action Security如果用户尚未被识别,他将被转发到application settings.yml文件中定义的默认登录操作。在用户成功通过身份验证后,如何将用户转发到最初请求的操作?
答案 0 :(得分:8)
首次点击您的登录操作时,将referer存储到用户会话:
if(!$this->getUser()->hasParameter('referer'))
{
$this->getUser()->setParameter('referer',$this->getRequest()->getReferer());
}
然后当登录成功时,将用户重定向到存储的referer:
$this->redirect($this->getUser()->getParameter('referer'));
你在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());
}
通过重置第一个块中的闪存,在登录尝试之间不会忘记,并且通过使用闪存,从其他页面登录不会干扰您的操作。