2017-04-11 77 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

相關問題