2017-04-11 79 views
0

所以我有一个应用程序使用FOSUserbundle进行用户管理,而HWIOAuthBundle进行OAuth身份验证,目前这只是Facebook。security.yml不断要求已经提供的check_path

当我想通过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} 

回答

0

我的猜测是,你的表单登录由secured_area防火墙抓获。

你有3个防火墙:

  • secured_area作为默认模式是/*
  • dev可能永远不会达到,因为secured_area已经匹配
  • main所有(因为模式)匹配,但它匹配一切从未到达

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

如果同时登录为不同的部分(针对用户如Facebook和仅仅以管理员访问后台登录表单用户),如果使用了正确的防火墙,可以指定不同的模式并检查剖析器栏(开发模式下屏幕底部的工具栏)。是通过将它移动到顶端来处理的,并确保将最通用的防火墙(使用/*模式)移动到底部,以确保它捕获所有不是先前的路由由另一个防火墙处理。

+0

不错的一个人,我将oauth移入主防火墙,并移除secured_area参数 – Tunds

相关问题