代码之家  ›  专栏  ›  技术社区  ›  Augunrik

使用symfony2通过URL自动登录

  •  5
  • Augunrik  · 技术社区  · 13 年前

    我正在尝试使用symfony2和一种特殊的url进行自动登录。就像 described here .

    但当我使用symfony2调试工具栏时,我注意到它显示:“未通过身份验证”。但我有一个会话,有一个用户对象,一切似乎都很好。为什么调试工具栏会这样说?

    zadbuchy描述的方法有什么问题吗?我使用的是symfony 2.1.6。

    编辑:我知道这可能不是“安全”登录方式(感谢@Bart的讨论),但我很好奇为什么symfony2不能正确识别登录。

    我的代码如下所示:

    $firewall = "support_secured_area";
    $token = new UsernamePasswordToken($user, null, $firewall, $user->getRoles());
    $this->get('security.context')->setToken($token);
    $session = $this->get('session');
    $session->set('_security_'.$firewall, serialize($token));
    
    // Fire the login event (Suggestion from the answer, but unfortunately it doesn't work :( ).
    $event = new InteractiveLoginEvent($this->getRequest(), $token);
    $this->get("event_dispatcher")->dispatch("security.interactive_login", $event);
    
    2 回复  |  直到 13 年前
        1
  •  7
  •   james_t    13 年前

    您需要发生交互登录事件,用户才能登录。

    // Here, "public" is the name of the firewall in your security.yml
    $token = new UsernamePasswordToken($user, $user->getPassword(), "public", $user->getRoles());
    $this->get("security.context")->setToken($token);
    
    // Fire the login event
    $event = new InteractiveLoginEvent($request, $token);
    $this->get("event_dispatcher")->dispatch("security.interactive_login", $event);
    
        2
  •  1
  •   Ycolin    11 年前
    $token = new UsernamePasswordToken($user, null, $firewall, $user->getRoles());
    $this->get('security.context')->setToken($token);
    $session = $this->get('session');
    $session->set('_security_'.$firewall, serialize($token));
    

    我在我们的几个项目中应用了上述解决方案。一个有效,但另一个无效。

    最后的解决方案是在下面的行中使用security_context_name而不是firewall_name。然后它对每个项目都起作用。

    $session->set('_security_'.$security_context_name, serialize($token));
    

    谢谢我的一位同事为我指出这一点。

    推荐文章