【问题标题】:Symfony2 (v2.3.4) - Acces denied when using FOSUserBundleSymfony2 (v2.3.4) - 使用 FOSUserBundle 时访问被拒绝
【发布时间】:2013-09-04 21:09:09
【问题描述】:

当我转到 project/web/ 时,应用程序将我重定向到 te web/login,其中是用于登录的表单。

但是当我获得授权后,在提交表单后,我回到了项目/web/ 路径,但访问被拒绝异常。我的设置有什么问题,我无法弄清楚。

routing.yml

my_backend:
    resource: "@MyBackendBundle/Controller/"
    type:     annotation
    prefix:   /

fos_user_security:
    resource: "@FOSUserBundle/Resources/config/routing/security.xml"

security.yml

security:
encoders:
    FOS\UserBundle\Model\UserInterface: sha512

providers:
    fos_userbundle:
        id: fos_user.user_provider.username

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            login_path:                     /login
            use_forward:                    false
            check_path:                     /login_check
            post_only:                      true
            always_use_default_target_path: false
            default_target_path:            /
            target_path_parameter:          _target_path
            use_referer:                    false
            failure_path:                   null
            failure_forward:                false
            username_parameter:             _username
            password_parameter:             _password
            csrf_parameter:                 _csrf_token
            intention:                      authenticate
        logout:       true
        anonymous:    true
access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, role: ROLE_ADMIN }

【问题讨论】:

    标签: php symfony fosuserbundle


    【解决方案1】:

    在您进行身份验证后,您将被设置另一个角色,然后是 ROLE_ADMIN。请使用该站点的 app_dev.php 版本,在您访问拒绝访问页面后,它会在底部告诉您您的角色。

    【讨论】:

      【解决方案2】:

      ROLE_ADMIN 是否与您的用户关联?

      另外,您是否尝试过删除anonymous 配置参数或至少将其设置为默认值(“~”)?如果我理解正确,您的整个应用程序都需要身份验证,但 /login 提供了输入用户凭据的方法。对吗?

      【讨论】:

      • ROLE_ADMIN 与我的用户相关联(我用 --super 参数提升了他)我必须尝试删除匿名参数,看看它是否有帮助是的,你理解正确。所有应用程序都应仅适用于经过身份验证的用户(管理员),只有 /login 路径适用于所有人。
      【解决方案3】:

      谢谢大家的回答。我解决了这个问题。

      在我使用promote --super command 创建和提升用户后,他获得了ROLE_SUPER_ADMIN 角色。但是在我的应用程序的访问控制中只有path: ^/, role: ROLE_ADMIN

      所以我将它修改为ROLE_SUPER_ADMIN,现在它可以在没有访问被拒绝异常的情况下工作。

      但是在这种情况下我还有一个问题。现在,当我使用 app.php 版本时,一切正常(在 /login 页面登录后,我被重定向到 /),但使用 app_dev.php 版本,登录后我被重定向到 web/_wdt/TOKEN,页面为空。

      【讨论】:

      【解决方案4】:

      设置角色层次结构,以便超级管理员可以访问所有定义为 admin-accessible 的路由:

      # app/config/security.yml
      security:
          role_hierarchy:
              ROLE_ADMIN:       ROLE_USER
              ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
      

      Symfony2 doc

      【讨论】:

        猜你喜欢
        • 2013-09-15
        • 2014-11-19
        • 2016-01-31
        • 1970-01-01
        • 2011-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多