security.yml一直要求提供已经提供的check_path

时间:2017-04-11 16:50:05

标签: symfony fosuserbundle hwioauthbundle

所以我有一个应用程序,它使用FOSUserbundle进行用户管理,使用HWIOAuthBundle进行OAuth身份验证,目前只有Facebook。

当我想通过FOSUserBundle模板提供的登录表单登录时,我一直收到此错误。

  

您必须使用安全防火墙配置中的form_login配置防火墙处理的检查路径。

但是当我使用facebook按钮通过登录登录时,我没有收到此错误。

以下是我的security.yml文件

security:

    encoders:
        FOS\UserBundle\Model\UserInterface: bcrypt

    # Roles being defined
    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    # http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers
    providers:
        in_memory:
            memory: ~

        fos_userbundle:
            id: fos_user.user_provider.username

    firewalls:
        # disables authentication for assets and the profiler, adapt it according to your needs

        secured_area:
            anonymous: ~
            logout: ~
            oauth:
                resource_owners:
                    facebook: "/login/check-facebook"
                login_path:        /login
                use_forward:       false
                failure_path:      /login
                oauth_user_provider:
                    service: my.custom.user_provider
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern: .*
            provider: fos_userbundle
            form_login:
                login_path: fos_user_security_login
                check_path: fos_user_security_check
                use_forward: false
                failure_path: null
            logout:
                 path:   fos_user_security_logout
                 target: /
            anonymous:    true
            http_basic:
              realm: "Reviews"
       # main:

            # activate different ways to authenticate

            # http_basic: ~
            # http://symfony.com/doc/current/book/security.html#a-configuring-how-your-users-will-authenticate

            # form_login: ~
            # http://symfony.com/doc/current/cookbook/security/form_login_setup.html

    # Access controls
    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/view, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_ADMIN }
        - { path: ^/create, role: ROLE_USER}
        - { path: ^/edit, role: ROLE_USER}
        - { path: ^/delete, role: ROLE_USER}

1 个答案:

答案 0 :(得分:0)

我的猜测是您的表单登录被secured_area防火墙捕获。

你有3个防火墙:

  • secured_area匹配所有内容,默认模式为/*
  • dev可能从未到过,因为secured_area已匹配
  • main匹配所有(因为模式),但永远不会达到

Symfony将使用第一个匹配的防火墙进行身份验证,并且由于未为登录表单配置secured_area,因此它不起作用。您可以合并两个防火墙(基本上将oauth部分复制到main,但单独的登录机制可能仍然会干扰。

如果两个登录都针对不同的部分(例如,用户的Facebook,以及只有管理员用户可以访问的后端的登录),您可以分配不同的模式并检查探查器栏(开发模式下屏幕底部的工具栏) )如果使用了正确的防火墙。

在任何情况下,我都会更改防火墙的顺序。您可以通过将dev移动到顶部来确保处理/*,并确保将最通用的防火墙(使用app模式)移动到底部,以确保它捕获之前未由其他人处理的所有路由防火墙。