0

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

通常,当我登录 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。

在谷歌浏览器上,cookie REMEMBERME 永远不会被删除,我在所有 URL 的设置中都看到了它。但是在 Mozilla Firefox 上,如果 remember_me 下的属性路径是 /,当我在 URL /login 上重定向时,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"
4

2 回答 2

3

如果您使用除用户名之外的其他属性来验证用户身份,那么 cookie 可能会保存用户名,而您的脚本需要其他属性,例如电子邮件。

您可以覆盖默认的记住我服务行为。看到这个答案:https ://stackoverflow.com/a/20550520/3096524

于 2013-12-13T11:56:12.230 回答
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);

}
于 2016-01-25T14:07:45.720 回答