如何实现在symfony2中以编程方式记住我?

时间:2013-08-03 12:22:24

标签: php symfony login remember-me

我已经以编程方式实现了登录功能。

此代码如下:

$token = new UsernamePasswordToken($user, $user->getPassword(), 'main', $user->getRoles());
$this->get('security.context')->setToken($token);

$event = new InteractiveLoginEvent($this->getRequest(),$token);
$this->get('event_dispatcher')->dispatch('security.interactive_login', $event);

在此之后,我该如何实现记住我?

(我知道如何使用表单,但我想实现以编程方式记住我。 )

请帮忙......

4 个答案:

答案 0 :(得分:9)

尝试使用RememberMeToken

$key = $this->getParameter('secret'); // your security key from parameters.yml

$token = new RememberMeToken($user, 'main', $key); 
$this->get('security.context')->setToken($token);

答案 1 :(得分:1)

我遇到了同样的问题。您应该使用RememberMeToken代替UsernamePasswordToken

类参数与UsernamePasswordToken非常相似,所以我不会详细介绍。

答案 2 :(得分:0)

您可以使用唯一ID创建Cookie。然后将此cookie存储在数据库中,并在新访问者访问该站点时检查此数据库。如果您将用户存储在数据库中,最好添加一个额外的列来存储此信息。顺便看看FOSUserBundle。

答案 3 :(得分:0)

我使用了与forgettenbas建议相同的方法,但出现了错误。我不得不使用$ this->容器(Symfony2):

$key = $this->container->getParameter('secret');

$token = new RememberMeToken($user, 'user_area', $key); 
$this->get('security.context')->setToken($token);

$ user是我的User类的一个实例,'user_area'是我的防火墙的名称。