FOSUserBundle 并记住我
Posted
技术标签:
【中文标题】FOSUserBundle 并记住我【英文标题】:FOSUserBundle and remember me 【发布时间】: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
有谁知道如何解决这个问题。
【问题讨论】:
【参考方案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
【讨论】:
这应该是评论...(或对所引用答案的更新)以上是关于FOSUserBundle 并记住我的主要内容,如果未能解决你的问题,请参考以下文章