Symfony FOSUserBundle记住我不起作用

时间:2017-05-23 15:08:04

标签: symfony fosuserbundle remember-me symfony-3.2

我正在使用FOSUserBundle和电子邮件作为用户名。

尝试'使用remember_me功能,但它不起作用。我已经阅读了这个Symfony2: "Remember me" tries to authenticate by username instad of email

这是一篇相当旧的文章,数据库中的用户名字段设置与电子邮件的值相同,所以我不明白为什么它不起作用。

使用Google Chrome Inspector检查REMEMBERME Cookie已设置...

有人可以帮忙吗?

这是我的security.yaml

providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

    firewalls:
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_token_generator: security.csrf.token_manager
            logout:       true
            anonymous:    true
            remember_me:
                secret:   '%secret%'
                lifetime: 604800 # 1 week in seconds
                path:     /
        # disables authentication for assets and the profiler, adapt it according to your needs
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

    access_control:
        - { path: ^/$, role: IS_AUTHENTICATED_FULLY }
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/account/*, role: IS_AUTHENTICATED_FULLY }
        - { path: ^/admin/*, role: ROLE_ADMIN }

1 个答案:

答案 0 :(得分:0)

好的,它是角色配置问题。

根据documentation

  • IS_AUTHENTICATED_ANONYMOUSLY :所有用户(甚至是匿名用户)都有此

  • IS_AUTHENTICATED_REMEMBERED :所有已登录的用户都拥有此功能,即使他们因为"记住我的cookie而记录了#34;。即使你 不使用记住我的功能,你可以用它来检查是否 用户已登录。

  • IS_AUTHENTICATED_FULLY :这类似于IS_AUTHENTICATED_REMEMBERED,但更强大。登录的用户
    只因为一个"记得我的饼干"会有 IS_AUTHENTICATED_REMEMBERED但不会有IS_AUTHENTICATED_FULLY。

所以,在我的security.yml中,尝试访问路径" ^ / $"和" ^ / account / *"由于 IS_AUTHENTICATED_FULLY 请求,无法关闭浏览器。

我已将其更改为此

access_control:
        - { path: ^/$, roles: IS_AUTHENTICATED_REMEMBERED }
        - { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/account/*, roles: IS_AUTHENTICATED_FULLY }
        - { path: ^/admin/*, roles: [IS_AUTHENTICATED_FULLY, ROLE_ADMIN] }

现在我可以访问" ^ / $"使用REMEMBERME cookie的路径,但不是" ^ / account / "和" ^ / admin / "因为敏感的数据而且限制性更强(而且它正是我想要的)。