使用symfony2通过URL自动登录

时间:2013-03-09 14:07:01

标签: php symfony symfony-2.1 autologin

我正在尝试使用symfony2和一种特殊的网址进行自动登录。就像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 个答案:

答案 0 :(得分:7)

您需要InteractiveLoginEvent才能让用户登录。

// 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);

答案 1 :(得分:1)

ssh-add -L

我在几个项目中应用了上述解决方案。一个工作,但另一个没有。

最终的解决方案是在下面的行中使用security_context_name而不是firewall_name。然后它适用于每个项目。

$token = new UsernamePasswordToken($user, null, $firewall, $user->getRoles());
$this->get('security.context')->setToken($token);
$session = $this->get('session');
$session->set('_security_'.$firewall, serialize($token));

感谢我的一位同事为我指出。