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

Mil*_* M. 5 php authentication cookies fosuserbundle symfony4

我有一个非常类似的问题:Symfony记住我不工作,浏览器重启时cookie被销毁

不幸的是,他们的解决方案并没有在Symfony 4中修复它.

用户登录后,将创建cookie"REMEMBERME".如果我重新启动浏览器,我仍然可以看到我的cookie,但是当我访问安全性下的页面时IS_AUTHENTICATED_REMEMBERED,它不起作用,我被重定向到登录页面,然后销毁cookie并且用户必须再次登录.

我一直在开发官方文档中解释的身份验证过程(实际上,没有花哨的定制,没有FOSUSERBUNDLE).

您可以在文档中找到我的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 }
Run Code Online (Sandbox Code Playgroud)

我的登录功能也在文档中详细说明

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,
    ]);
}
Run Code Online (Sandbox Code Playgroud)

我试图取代ROLE_USERIS_AUTHENTICATED_REMEMBERED在我的路线(我不明白究竟是什么区别寿我看了他们的文档 吧),但什么都没有改变.cookie在这里,但它仍然无法帮助我保持登录状态.

这里的任何帮助非常感谢.我很想在我的应用程序上记住我的功能.非常感谢.

Teb*_*ebe 2

如果 cookie 可用但您未成功通过身份验证,也许检查一下您的身份验证测试(!)好吗?

IS_AUTHENTICATED_REMEMBERED 将为 true,但 IS_AUTHENTICATED_FULLY 为 false,因为第二个排除了通过记住我 cookie 进行身份验证的用户。

(再次阅读文档并更改您的身份验证检查器代码)

还要检查其他事情:

  • 您是否进行/强制重新验证
  • 登录表单包含 crfs 令牌和记住我复选框?
  • 检查所有其他记住我的参数(更改默认值)
  • 上次使用的用户名是否已成功填写在登录表单中?