Symfony 4记住我不起作用,当浏览器重启时cookie被破坏

时间:2018-10-14 13:46:04

标签: php authentication cookies fosuserbundle symfony4

我遇到的问题非常类似于: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.yaml
security:
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在这里,但仍然无法帮助我保持登录状态。

非常感谢您的帮助。我希望在我的应用中使用“记住我”功能。非常感谢。

1 个答案:

答案 0 :(得分:2)

如果cookie可用但您未成功通过身份验证,则可能检查您的身份验证测试(!)可以吗?

IS_AUTHENTICATED_REMEMBERED为true,但IS_AUTHENTICATED_FULLY为false,因为第二个不包括记住我的cookie身份验证用户。

(重新阅读doc并更改您的身份验证检查者代码)

还要检查其他内容:

  • 您是否执行/强制执行reauthentication
  • 登录表单包含crfs令牌和“记住我”复选框吗?
  • 同时检查所有其他记住的me parameters(更改默认值)
  • 上次使用的用户名是否已成功填写登录表单?