我正在使用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 }
答案 0 :(得分:0)
好的,它是角色配置问题。
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 / "因为敏感的数据而且限制性更强(而且它正是我想要的)。