可靠地重定向到symfony2中最后访问的页面

时间:2015-09-18 09:56:52

标签: symfony

我在我的主页中嵌入了FosUserBundle登录,我已经覆盖了fos的安全控制器并更改了renderLogin()操作,我必须使用if条件重定向到上次访问的页面使用< strong> referers , 一切都很好,但我现在意识到HTTP协议不需要HTTP Referer标头,它可以被浏览器设置完全跳过甚至欺骗等不可靠

但是如果symfony框架可以保证 $request->server->get('HTTP_REFERER')$request->headers->get('referer')将被设置。我可以毫不费力地使用这些

我的问题

  • 是symfony请求对象的引用者100%可靠吗?
  • $request->server->get('HTTP_REFERER')$request->headers->get('referer')之间的区别是什么?
  • 如果它们不可靠会有什么替代方案?

(P.S)

在symfony docs

  

如果用户请求http://www.example.com/admin/post/18/edit,则在他们成功登录后,最终会将其发送回http://www.example.com/admin/post/18/edit。这是通过在会话中存储请求的URL来完成的。

但他们没有解释它的内在工作。如果 referers 最终被证明是不可靠的,那么我的选择如下,欢迎任何建议

1)。注册列表器并添加属性last_path

2)。存储会话变量last_path

1 个答案:

答案 0 :(得分:2)

您可以在登录会话之前保存所请求的URL,然后如果成功将用户重定向到所需的URL。

捕获URL并将其保存在会话启动方法中,然后在onAuthenticationSuccess方法中恢复。

obs。:下面将仅显示理解解决方案所需的部分代码,可以在以下位置访问整个代码:http://symfony.com/doc/current/security/guard_authentication.html

<?php
namespace VER\VerCoreBundle\Security;

class FormAuthenticator extends AbstractGuardAuthenticator
{

  /**
   * {@inheritdoc}
   */
  public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
  {
    $url = $this->router->generate('_welcome');
    $previous = $request->getSession()->get('previous');

    if ($previous) {
      $url = $previous;
    }
    return new RedirectResponse($url);
  }

  /**
   * {@inheritdoc}
   */
  public function start(Request $request, AuthenticationException $authException = null)
  {
    $request->getSession()->set('previous', $request->getUri());
    $url = $this->router->generate('ver_core_login');
    return new RedirectResponse($url);
  }

}
?>