Symfony FOSUserBundle 记住我不起作用
Symfony FOSUserBundle Remeber me doesn't work
我正在使用 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 }
好的,这是一个 角色 配置问题。
根据 documentation:
IS_AUTHENTICATED_ANONYMOUSLY:所有用户(甚至匿名用户)都有这个
IS_AUTHENTICATED_REMEMBERED:所有登录用户都有这个,即使他们是因为"remember me cookie"登录的。即使你
不要使用记住我的功能,您可以使用它来检查是否
用户已登录。
IS_AUTHENTICATED_FULLY:类似于IS_AUTHENTICATED_REMEMBERED,但更强。登录用户
只因一个"remember me cookie"会有
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/”因为敏感数据(这正是我想要的)。
我正在使用 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 }
好的,这是一个 角色 配置问题。
根据 documentation:
IS_AUTHENTICATED_ANONYMOUSLY:所有用户(甚至匿名用户)都有这个
IS_AUTHENTICATED_REMEMBERED:所有登录用户都有这个,即使他们是因为"remember me cookie"登录的。即使你 不要使用记住我的功能,您可以使用它来检查是否 用户已登录。
IS_AUTHENTICATED_FULLY:类似于IS_AUTHENTICATED_REMEMBERED,但更强。登录用户
只因一个"remember me cookie"会有
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/”因为敏感数据(这正是我想要的)。