【问题标题】:Symfony FOSUserBundle Remeber me doesn't workSymfony FOSUserBundle 记住我不起作用
【发布时间】:2023-03-11 17:47:01
【问题描述】:

我正在使用 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 }

【问题讨论】:

    标签: symfony fosuserbundle remember-me symfony-3.2


    【解决方案1】:

    好的,这是一个角色配置问题。

    根据documentation

    • IS_AUTHENTICATED_ANONYMOUSLY:所有用户(甚至匿名用户)都有这个

    • IS_AUTHENTICATED_REMEMBERED:所有登录的用户都有这个,即使他们因为“记住我的 cookie”而登录。即使你 不要使用记住我功能,您可以使用它来检查是否 用户已登录。

    • IS_AUTHENTICATED_FULLY:这类似于 IS_AUTHENTICATED_REMEMBERED,但更强。已登录的用户
      只因为一个“记住我的cookie”才会有
      IS_AUTHENTICATED_REMEMBERED,但不会有 IS_AUTHENTICATED_FULLY。

    因此,在我的 security.yml 中,由于 IS_AUTHENTICATED_FULLY 请求,在关闭浏览器后尝试访问路径“^/$”和“^/account/*”是不可能的。

    我已经改成这个了

    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/”,因为敏感数据限制性更强(这正是我想要的)。

    【讨论】:

      猜你喜欢
      • 2019-09-07
      • 2012-01-28
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 1970-01-01
      相关资源
      最近更新 更多