1

我在 PHP 7.3.4 上使用 Symfony 4.3.2 这是我的 security.yaml

security:
providers:
    admin_provider:
        entity:
            class: App\Entity\Admin
            property: username
    user_provider:
        entity:
            class: App\Entity\User
            property: username
    chain_provider:
        chain:
            providers: [user_provider, admin_provider]
firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    backoffice:
        pattern: ^/
        provider: admin_provider
        anonymous: true
        logout:
            path: admin.logout
            target: admin.login
        form_login:
            login_path: admin.login
            check_path: admin.login
            default_target_path: admin.index
    main:
        pattern: ^/
        provider: user_provider
        anonymous: true
        logout:
            path: logout
            target: login
        remember_me:
            secret:   '%kernel.secret%'
            lifetime: 604800 # 1 week in seconds
            path:     /
        form_login:
            login_path: login
            check_path: login
access_control:
    - { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, roles: ROLE_ADMIN }
    - { path: ^/mon-compte, roles: ROLE_USER }
encoders:
    App\Entity\User:
        algorithm: auto
        cost: 12
    App\Entity\Admin:
        algorithm: auto
        cost: 12

当然,我有表单、控制器和视图。

现在发生的是:

  • 当去 /admin 我被重定向到 /admin/ 表单
  • 我成功验证并返回 /admin/login。
  • 在那里,安全决定忽略我的身份验证并创建一个新的匿名会话
  • 身份验证后 /login 也有同样的问题,我以匿名方式返回 /

我在分析器中检查了我的请求,当在我的表单上发布时,我可以在我的用户会话中看到会话“_security_main”。

C:74:"Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken":294:{a:3:{i:0;N;i:1;s:4:"main";i:2;a:5:{i:0;C:15:"App\Entity\User":29:{a:2:{i:0;i:8;i:1;s:4:"test";}}i:1;b:1;i:2;a:1:{i:0;O:41:"Symfony\Component\Security\Core\Role\Role":1:{s:47:"\x00Symfony\Component\Security\Core\Role\Role\x00role";s:13:"ROLE_CUSTOMER";}}i:3;a:0:{}i:4;a:1:{i:0;s:13:"ROLE_CUSTOMER";}}}}"

但是在我的旧 Symfony 项目 3.4 中,我成功地进行了身份验证并获得了我的管理会话。

我不明白为什么在我的新版本上它不起作用..也许会话生命周期?会话的权利可写?

唯一可行的解​​决方案是勾选“记住我”框

谢谢帮助我

4

0 回答 0