php - Symfony 4 Remember Me 不起作用,浏览器重启时 cookie 被破坏

标签 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,
    ]);
}

我试图在我的 route 用 IS_AUTHENTICATED_REMEMBERED 替换 ROLE_USER(我不明白这到底有什么区别 I read their doc 关于它)但没有任何改变。 cookie 在这里,但它仍然无法帮助我保持登录状态。

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

最佳答案

如果 cookie 可用但您未成功通过身份验证,也许检查您的身份验证测试(!)是否正常?

IS_AUTHENTICATED_REMEMBERED 为真,但 IS_AUTHENTICATED_FULLY 为假,因为第二个不包括已通过记住我 cookie 身份验证的用户。

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

也检查其他事情:

  • 你有没有做/强制reauthentication
  • 登录表单包含 crfs token 和记住我复选框?
  • 检查所有其他记住me parameters太(更改默认值)
  • 上次使用的用户名是否成功填写在登录表单中?

关于php - Symfony 4 Remember Me 不起作用,浏览器重启时 cookie 被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52803295/

相关文章:

Node.js https pem 错误 : routines:PEM_read_bio:no start line

python - 无法对 Matrix Routing v8 HereMaps API 上的异步请求进行身份验证

java - 网络文档的复杂检索

php - 调用未定义方法时不调用关闭回调

python - 使用外部 Web 服务的 Django 身份验证

cookies - Outlook Web 插件 - 任务 Pane 关闭时清除 cookie win 10

reactjs - "Missing the cookie header or object"在 react 烟雾测试期间抛出错误(Create-react-app)

javascript - URL::action() 和 Javascript int 变量之间的连接

php - 在PHP页面上显示泰语字符/泰语字符可以在服务器的数据库中显示

php:声明函数的参数类型