2014-01-24 44 views
0

我正在使用Symfony FOSUserBundle,SonataUserBundle,FOSFacebookBundle。我已將登錄按鈕添加到我的應用程序。登錄後出現FOSFacebookBundle錯誤控制器必須返回響應(空給定)

我可以使用Facebook登錄,但登錄後頁面重定向到演示/ secured/login_check,我得到下面的錯誤。

「控制器必須返回一個響應(null給出)。你忘了在控制器的某處添加return語句嗎?」

我已經看

Service not triggered : The controller must return a response (null given)

https://github.com/FriendsOfSymfony/FOSFacebookBundle/issues/186

但不知道什麼樣的變化,我應該讓我的配置。

下面,如果我的安全配置

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

    role_hierarchy: 
     ROLE_ADMIN:  [ROLE_USER, ROLE_SONATA_ADMIN] 
     ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 
     SONATA: 
      - ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT # if you are using acl then this line must be commented 

    providers: 
     chain_provider: 
      chain: 
       providers: [fos_userbundle, fo_fos_facebook_provider]  
     fos_userbundle: 
      id: fos_user.user_manager 
     fo_fos_facebook_provider: 
      id: my.facebook.user 

    firewalls: 
     # Disabling the security for the web debug toolbar, the profiler and Assetic. 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     # -> custom firewall for the admin area of the URL 
     admin: 
      pattern:   /admin(.*) 
      context:   user 
      form_login: 
       provider:  fos_userbundle 
       login_path:  /admin/login 
       use_forward: false 
       check_path:  /admin/login_check 
       failure_path: null 
      logout: 
       path:   /admin/logout 
      anonymous:   true 

     main: 
      pattern: ^/ 
      context:    user 
      form_login: 
       provider:  fos_userbundle 
       login_path:  /login 
       use_forward: false 
       check_path:  /login_check 
       failure_path: null 
       csrf_provider: form.csrf_provider 
      logout:  true 
      anonymous: true 

     public: 
      # since anonymous is allowed users will not be forced to login 
      pattern: ^/.* 
      fos_facebook: 
       app_url: "http://apps.facebook.com/my-app/" 
       server_url: "http://localhost/me/my/symfony/web/app_dev.php/" 
       login_path: /login 
       check_path: /login_check 
       default_target_path:/
       provider: fo_fos_facebook_provider 
       redirect_to_facebook_login: false 
      anonymous: true 

    access_control: 
     # URL of FOSUserBundle which need to be available to anonymous users  
     - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     # Admin login page needs to be access without credential 
     - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY } 

     # Secured part of the site 
     # This config requires being logged for the whole site and having the admin role for the admin part. 
     # Change these rules to adapt them to your needs 
     - { path: ^/admin/, role: [ROLE_ADMIN, ROLE_SONATA_ADMIN] } 
     - { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY } 

     - { path: ^/secured/.*, role: [IS_AUTHENTICATED_FULLY] } 

    acl: 
     connection: default   

我試圖改變配置如下,以避免2防火牆匹配相同的URL模式。

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

    role_hierarchy: 
     ROLE_ADMIN:  [ROLE_USER, ROLE_SONATA_ADMIN] 
     ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 
     SONATA: 
      - ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT # if you are using acl then this line must be commented 

    providers: 
     chain_provider: 
      chain: 
       providers: [fos_userbundle, fo_fos_facebook_provider]  
     fos_userbundle: 
      id: fos_user.user_manager 
     fo_fos_facebook_provider: 
      id: my.facebook.user 

    firewalls: 
     # Disabling the security for the web debug toolbar, the profiler and Assetic. 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     # -> custom firewall for the admin area of the URL 
     admin: 
      pattern:   /admin(.*) 
      context:   user 
      form_login: 
       provider:  fos_userbundle 
       login_path:  /admin/login 
       use_forward: false 
       check_path:  /admin/login_check 
       failure_path: null 
      logout: 
       path:   /admin/logout 
      anonymous:   true 

     main: 
      pattern: ^/ 
      context:    user 
      fos_facebook: 
       app_url: "http://apps.facebook.com/my-app/" 
       server_url: "http://localhost/me/my/symfony/web/app_dev.php/" 
       login_path: /login 
       check_path: /login_check 
       default_target_path:/
       provider: fo_fos_facebook_provider 
       redirect_to_facebook_login: false     
      form_login: 
       provider:  fos_userbundle 
       login_path:  /login 
       use_forward: false 
       check_path:  /login_check 
       failure_path: null 
       csrf_provider: form.csrf_provider 
      logout:  true 
      anonymous: true 

    access_control: 
     # URL of FOSUserBundle which need to be available to anonymous users  
     - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     # Admin login page needs to be access without credential 
     - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY } 

     # Secured part of the site 
     # This config requires being logged for the whole site and having the admin role for the admin part. 
     # Change these rules to adapt them to your needs 
     - { path: ^/admin/, role: [ROLE_ADMIN, ROLE_SONATA_ADMIN] } 
     - { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY } 

     - { path: ^/secured/.*, role: [IS_AUTHENTICATED_FULLY] } 

    acl: 
     connection: default   

但我現在得到不同的錯誤爲波紋管

「InvalidConfigurationException:您不允許定義路徑新元素‘security.firewalls’請定義此路徑的所有元素在一個配置文件「。

回答

1

據報道在giyhub問題: 「你不能有2個防火牆具有相同的模式:匹配的第一個防火牆將被使用,因此您的公開防火牆不能作爲主要的已經是一個包羅萬象的」

您的主要模式和您的公共模式匹配相同的路線。 你可以在這裏嘗試一下:http://www.regular-expressions.info/javascriptexample.html

案例:^ /主題:/家OK 案例:^/*主題/家OK

所以,你必須匹配完全相同的網址兩個防火牆。您必須更改公用防火牆或主防火牆的路由規則。

+0

我刪除了公共防火牆,並在主防火牆中合併了fos_facebook。請檢查上面的配置。我現在得到了不同的錯誤。 – vishal

相關問題