我遇到的问题非常类似于:Symfony Remember Me doesn't work, the cookie is destroyed when browser reboot
不幸的是,他们的解决方案无法在Symfony 4中解决。
用户登录后,将创建cookie“ REMEMBERME”。如果重新启动浏览器,我仍然可以看到我的cookie,但是当我在安全性IS_AUTHENTICATED_REMEMBERED
下访问某个页面时,该页面无法正常工作,并且将我重定向到登录页面,然后该cookie被销毁,并且用户必须再次登录。
我一直在按照官方文档中的说明开发身份验证过程(对这本书来说,确实没有花哨的自定义,没有FOSUSERBUNDLE)。
您可以找到我在documentation
中构建的service.yamlsecurity:
encoders:
App\Entity\User:
algorithm: bcrypt
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
providers:
in_memory: { memory: ~ }
our_db_provider:
entity:
class: App\Entity\User
property: email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
http_basic: ~
provider: our_db_provider
anonymous: ~
form_login:
login_path: login
check_path: login
default_target_path: dashboard
remember_me:
secret: '%kernel.secret%'
lifetime: 604800 # 1 week in seconds
path: /
secure: true
name: REMEMBERME
remember_me_parameter: _remember_me
logout:
path: /logout
target: /
secured_area:
form_login:
csrf_token_generator: security.csrf.token_manager
provider: our_db_provider
logout:
path: /logout
target: /
role_hierarchy:
ROLE_ADMIN: ROLE_USER
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/profile, roles: IS_AUTHENTICATED_REMEMBERED }
我的登录功能如in the documentation as well
所示public function login(Request $request, AuthenticationUtils $authenticationUtils)
{
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastEmail = $authenticationUtils->getLastUsername();
return $this->render('platform/user/login.html.twig', [
'last_email' => $lastEmail,
'error' => $error,
]);
}
我已尝试在路线中将ROLE_USER
替换为IS_AUTHENTICATED_REMEMBERED
(我不知道I read their doc的确切区别是什么),但没有任何变化。 Cookie在这里,但仍然无法帮助我保持登录状态。
非常感谢您的帮助。我希望在我的应用中使用“记住我”功能。非常感谢。
答案 0 :(得分:2)
如果cookie可用但您未成功通过身份验证,则可能检查您的身份验证测试(!)可以吗?
IS_AUTHENTICATED_REMEMBERED为true,但IS_AUTHENTICATED_FULLY为false,因为第二个不包括记住我的cookie身份验证用户。
(重新阅读doc并更改您的身份验证检查者代码)
还要检查其他内容: