안녕하십니까, 도움을 주신 데 대해 큰 감사합니다. 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 문을 추가하는 것을 잊었습니까? (잡히지 않는 예외).
여기에 제 오류가 있습니까?
문제는 여기 https://github.com/FriendsOfSymfony/FOSFacebookBundle/issues/186 해결되었다) – Gerfaut
좋아, 당신은 솔루션을 설명하는 대답을 추가해야합니다. – AdrienBrault
문제는 방화벽 패턴에 있습니다. 첫 번째 패턴 만 실행되기 때문에 두 개의 동일한 패턴을 가질 수 없습니다. 여기에 올바른 방법은 하나의 방화벽 (패턴/^ 사용) 만 정의하고 fos_facebook 및 form_login을 설정하는 것이 었습니다. – Gerfaut