【问题标题】:Symfony3 JMSSecurityExtraBundle Loop of redirections with isAuthenticated in access_controlSymfony3 JMSSecurityExtraBundle 在 access_control 中使用 isAuthenticated 进行重定向循环
【发布时间】:2023-03-12 05:04:02
【问题描述】:

我使用JMSSecurityExtraBundle (1.6.1) 和

  • Symfony 3.1
  • FOSUserBundle
  • JMSI18nRoutingBundle
  • JMSTranslationBundle

当我登录并尝试访问登录页面时,一切正常。 (403 拒绝异常) 但是如果我没有通过身份验证并尝试访问登录页面,我就会有一个重定向循环。

配置错误?还是 JMSI18nRoutingBundle 的错误?有什么想法吗?

encoders:
    FOS\UserBundle\Model\UserInterface: bcrypt

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN

providers:
    fos_userbundle:
        id: fos_user.user_provider.username

firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    main:
        pattern: ^/

        form_login:
            provider: fos_userbundle
            csrf_token_generator: security.csrf.token_manager
            login_path: fos_user_security_login
            check_path: fos_user_security_check

        oauth:
            resource_owners:
                facebook:           "/connect/check-facebook"
                google:             "/connect/check-google"
                twitter:            "/connect/check-twitter"
            login_path:        fos_user_security_login
            failure_path:      /connect
            oauth_user_provider:
                service: customUserProvider

        logout:
            path: fos_user_security_logout
        anonymous: true

access_control:
    - { path: "^/[a-z]{2}_[A-Z]{2}/login$", role: "!is_Authenticated()" }
    - { path: "^/[a-z]{2}_[A-Z]{2}/register", role: "!is_Authenticated()" }
    - { path: "^/[a-z]{2}_[A-Z]{2}/resetting", role: "!is_Authenticated()" }
    - { path: "^/[a-z]{2}_[A-Z]{2}/(account|compte){1}", role: IS_AUTHENTICATED_REMEMBERED }
    - { path: "^/[a-z]{2}_[A-Z]{2}/(recipe/add|recette/ajouter){1}", role: IS_AUTHENTICATED_REMEMBERED }
    - { path: "^/[a-z]{2}_[A-Z]{2}/(recipe/.*/edit|recette/.*/editer){1}", role: IS_AUTHENTICATED_REMEMBERED }

谢谢大家

【问题讨论】:

    标签: jms symfony access-control


    【解决方案1】:

    is_Authenticated() 在这种情况下是不够的,因为ANONYMOUS 用户被自动分配了IS_AUTHENTICATED_ANONYMOUSLY 角色,因此是经过身份验证的。

    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, role: ROLE_USER }
    

    以上是您可以用来防止循环的一种可能的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-28
      • 2019-04-21
      • 2021-05-21
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      相关资源
      最近更新 更多