记住我在Symfony2中不起作用的功能

adi*_*yap 13 remember-me symfony

我已经实现了在Symfony2中记住我的功能.当我使用"记住我"框登录时,会创建名为"REMEMBERME"的cookie.如果我关闭浏览器并在数小时后打开它,那么该cookie也可用.但是当我加载我的应用程序的主页时,cookie会自动删除,我看不到用户登录.有人能解释我删除cookie的原因吗?

remember_me:
          key:      qwerty
          lifetime: 604800
          path:     /
          domain:   ~ 
Run Code Online (Sandbox Code Playgroud)

这是我的security.yml文件部分

编辑:我还没有找到这个问题的解决方案......

EDIT2:现在遇到了新问题.REMEMBERME cookie根本没有设置.怎么解决这个?

已解决:见下面的答案

luc*_*y14 13

虽然这个问题已经得到解答,但我想提供一个可能的解决方案,如果只是为后代和谷歌搜索推荐这个问题:)

"问题很简单:记住使用的没有IS_AUTHENTICATED_FULLY角色,但只有IS_AUTHENTICATED_REMEMBERED才能记住记住的用户和登录用户之间的区别"

来源:http://www.mail-archive.com/symfony-users@googlegroups.com/msg34021.html

这意味着在安全配置中,除了IS_AUTHENTICATED_FULLY角色之外,还必须确保为每个ACL条目配置IS_AUTHENTICATED_REMEMBERED角色.

例如:

#app/config/security.yml
security:
    ...
    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: [IS_AUTHENTICATED_FULLY,IS_AUTHENTICATED_REMEMBERED] }
Run Code Online (Sandbox Code Playgroud)

  • `IS_AUTHENTICATED_FULLY`和`IS_AUTHENTICATED_REMEMBERED`不需要加在一起,它们是一个层次(`FULLY> REMEMBERED> ANONYMOUSLY`).在这种情况下,只需要`IS_AUTHENTICATED_REMEMBERED`. (2认同)

小智 11

约翰.

我和你做的(或者做过)有同样的问题,我发现当我(Symfony2实际上是=))在第101行的/ vendor/symfony/src/Symfony/Component/Security /设置REMEMBERME cookie Http/RememberMe/TokenBasedRememberMeService.php文件$ user-> getPassword()返回NULL,因此cookie使用NULL密码值计算哈希值.

什么发生下一次,当你回到你的网站是完全有信心,你会被自动验证,Symfony的开始在检查你的cookie 相同的文件上面,但在第58行是创立该Cookie 哈希值是不一样,它预计和抛出异常('cookie的散列无效.')在内部捕获并继续某处.

所以这就是为什么在我的情况下cookie不起作用.

我还没有找到解决方案,但我会挖掘它,也许我很幸运.

希望你的问题是一样的,解决方案对我们两个都有帮助.

解决方案:

当实现eraseCredentials()声称用于从UserInterface擦除用户敏感数据时,不执行$ this-> password = null.我犯了这个错误,因为我没有理解它的目的.您可以浏览Symfony 2 Logout(UserInterface :: eraseCredentials)以获得一些解释.所以它序列化了令牌对象,我们遇到了麻烦.