记住我在Symfony2重启浏览器后无法正常工作

时间:2013-09-05 17:04:40

标签: php symfony cookies fosuserbundle remember-me

记住我创建REMEMBERME cookie的功能很好。当我重新启动浏览器时,cookie也可用,但我没有登录,而且我在Symfony工具栏中像匿名一样进行身份验证。

Normaly当我登录mydomain.com如果我已经登录我将重定向到mydomain.com/home/calendar如果不是我重定向到mydomain.com/login

#security.yml
main:
        pattern: ^/.+
        switch_user: { role: ROLE_SUPER_ADMIN, parameter: _steal_user }
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            always_use_default_target_path: true
            default_target_path: bleep_university_calendar
            login_path: /login
            check_path: /login_check
            remember_me: true
        remember_me:
            key: "%secret%"
            lifetime: 31536000
            always_remember_me: true
            remember_me_parameter: _remember_me
            path: /home/calendar
            domain: ~
        logout: true
        anonymous: false
        context: university

任何人都可以解释一下它不起作用的原因吗?

我正在使用Symfony 2.1.7和FOSuserbundle。

在Google Chrome上,Cookie REMEMBERME永远不会删除,我会在所有网址的设置中看到它。但是在Mozilla Firefox上,如果我在URL /登录时重定向,那么remember_me下的属性路径是/ cookie正在删除。就像cookie只在Firefox上删除一样。

这是Firefox上REMEMBERME cookie的值

expires : 1409988370
host : "localhost"      
isDomain : false        
isHttpOnly : true       
isSecure : false        
maxAge : undefined      
name : "REMEMBERME"     
path : "/"      
rawValue :  "QmxlZXBcTWFzdGVyU2Vydml...WJlOWI3ZTMyNzkxZGQyZGU3"     
value : "QmxlZXBcTWFzdGVyU2Vydml...WJlOWI3ZTMyNzkxZGQyZGU3"

2 个答案:

答案 0 :(得分:3)

如果您使用的是用户名以外的其他属性来对用户进行身份验证,那么当您的脚本需要其他属性(如电子邮件)时,Cookie可能会保存用户名。

您可以覆盖默认的“记住我”服务行为。请参阅此答案:https://stackoverflow.com/a/20550520/3096524

答案 1 :(得分:1)

@nikolajosipovic是对的。

尝试转到您的用户实体提供商,例如(AppBundle / Entity / User.php)

并向serialize()/ unserialize()方法添加电子邮件:

public function serialize()
{
    return serialize(array(
        $this->id,
        $this->username,
        $this->email, //Add email
        $this->password,
        $this->isActive,
        ));
}

public function unserialize($serialized)
{
    list(
        $this->id,
        $this->username,
        $this->email, //Add email
        $this->password,
        $this->isActive,
    ) = unserialize($serialized);

}