【问题标题】:FOSUserBundle and remember meFOSUserBundle 并记住我
【发布时间】:2012-01-28 18:45:38
【问题描述】:

我在 Symfony2 中使用 FOSUserBundle 进行身份验证。一切正常,除了“记住我”。我的 security.yml 看起来像这样:

security:
providers:
    fos_userbundle:
        id: fos_user.user_manager

encoders:
    'FOS\UserBundle\Model\UserInterface': sha512

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
        logout:       true
        anonymous:    true
        remember_me:
            key:      aSecretKey
            lifetime: 3600
            path:     /
            domain:   ~

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

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN

有谁知道如何解决这个问题。

【问题讨论】:

    标签: symfony remember-me fosuserbundle


    【解决方案1】:

    如果浏览器无法在您的domain(例如localhost)上设置cookie,Remember me 功能可能无法工作。如果是这种情况,请将您的域设置为有效的域名(例如,dev.site.com)。还要确保您已清除缓存。

    【讨论】:

    • 感谢您的回答。我尝试了这些可能性,但后来我发现问题出在 security.yml 中的 logout:true 上。我删除了这些行,然后一切正常。
    【解决方案2】:

    添加安全 remenber_me 配置后,它对我的​​会话生命周期有效:

      framework:
        session:
            default_locale: %locale%
            auto_start:     true
            lifetime:       3600
    

    【讨论】:

    • 这部分应该添加到哪里? security.yml,在……什么下?
    【解决方案3】:

    这对我也不起作用,因为我使用了 2 个用户提供程序:FOSUserBundle 和 FosFacebook。

    实际上是在设置 cookie,但在 TokenBasedRememberMeServices、processAutoLoginCookie 中我看到使用了错误的提供程序。

    为了解决这个问题,我必须在 security.yml 中的 remember_me 部分中指定我想使用的提供程序。

    firewalls:
        main:
            ...
            remember_me:
                secret:      "%secret%"
                lifetime: 2592000
                path:     /
                domain:   ~
                user_provider: fos_userbundle
    

    也许这对其他人也有帮助。

    更新:我已经修改了响应,因为在较新版本的 Symfony 中,remember_me 下的“key”现在称为“secret”。

    【讨论】:

    • 天哪,最好的答案!为我节省了大量的调试
    • 这应该是赢家的答案!
    【解决方案4】:

    正如“Adrian C”所说,但做了一些对我有用的改变。

    我用“秘密”代替“钥匙”

     firewalls:
         main:
             ...
             remember_me:
                 secret:      "%secret%"
                 lifetime: 2592000
                 path:     /
                 domain:   ~
                 user_provider: fos_userbundle
    

    【讨论】:

    • 这应该是评论...(或对所引用答案的更新)
    猜你喜欢
    • 2023-03-11
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多