2012-09-16 6 views
1

안녕하십니까, 도움을 주신 데 대해 큰 감사합니다. FOSFacebook 작업을 얻으려고하고 있지만 지금까지는 불가능한 것 같습니다. 많은 구성과 많은 수정 작업을 시도했지만 나에게 아무런 효과가 없었습니다. 여기 서비스가 실행되지 않음 : 컨트롤러가 응답을 반환해야합니다 (null이 주어짐)

내 구성입니다 :

security.yml

chain_provider: 
    chain: 
     providers: [fos_userbundle, fos_facebook_provider] 
fos_userbundle: 
    id: fos_user.user_provider.username 
fos_facebook_provider: 
     id: fos.facebook.custom_provider 

firewalls: 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 
    main: 
     pattern: ^/ 
     form_login: 
      login_path: fos_user_security_login 
      check_path: fos_user_security_check 
      provider: fos_userbundle 
      csrf_provider: form.csrf_provider 
     logout:  true 
     anonymous: true 
    public: 
      pattern: ^/ 
      fos_facebook: 
       app_url: "http://apps.facebook.com/myApp/" 
       server_url: "http://www.mywebsite.com" 
       login_path: /facebook/login 
       check_path: /facebook/check 
       default_target_path:/
       provider: fos_facebook_provider 
      anonymous: false 
      logout: 
       handlers: ["fos_facebook.logout_handler"] 

config.yml

fos.facebook.custom_provider: 
    class: Bundles\UserBundle\Security\User\Provider\FacebookProvider 
    arguments: 
     facebook: "@fos_facebook.api" 
     userManager: "@fos_user.user_manager" 
     validator: "@validator" 
     container: "@service_container" 
fos_facebook: 
    file: %kernel.root_dir%/../vendor/facebook/php-sdk/src/base_facebook.php 
    alias: facebook 
    app_id: myid 
    secret: mysecret 
    cookie: true 
    permissions: [email] 

routing.yml

_security_check: 
     pattern: /facebook/check 

    _security_logout: 
     pattern: /logout 

나뭇 가지 템플릿

<script type="text/javascript"> 
    function goLogIn(){ 
     window.location.href = "{{ path('_security_check') }}"; 
    } 

    function onFbInit() { 
     if (typeof(FB) != 'undefined' && FB != null) { 
      FB.Event.subscribe('auth.statusChange', function(response) { 
       if (response.session || response.authResponse) { 
        setTimeout(goLogIn, 500); 
       } else { 
        window.location.href = "{{ path('_security_logout') }}"; 
       } 
      }); 
     } 
    } 
</script> 
{{ facebook_initialize({'xfbml': true, 'fbAsyncInit': 'onFbInit();'}) }} 

UserController.php

* @Route("/facebook/check") 
*/ 
public function loginCheckFacebookAction(){ 

} 

그리고 공급자 및합니다 (Readme에서와 같이) 사용자 클래스에 수정.

하지만 문제는 서비스가 호출되지 않는 것입니다. 실제로, UserController의 메소드는 더미 메소드 여야하며 여기서는 그렇지 않습니다. 메서드가 호출되고 물론이 오류가 발생합니다.

LogicException : 컨트롤러가 응답 (null이 지정됨)을 반환해야합니다. 컨트롤러에 return 문을 추가하는 것을 잊었습니까? (잡히지 않는 예외).

여기에 제 오류가 있습니까?

답변

1

제거하여 UserController 경로/액션 loginCheckFacebookAction

+0

문제는 여기 https://github.com/FriendsOfSymfony/FOSFacebookBundle/issues/186 해결되었다) – Gerfaut

+0

좋아, 당신은 솔루션을 설명하는 대답을 추가해야합니다. – AdrienBrault

+0

문제는 방화벽 패턴에 있습니다. 첫 번째 패턴 만 실행되기 때문에 두 개의 동일한 패턴을 가질 수 없습니다. 여기에 올바른 방법은 하나의 방화벽 (패턴/^ 사용) 만 정의하고 fos_facebook 및 form_login을 설정하는 것이 었습니다. – Gerfaut