2016-12-04 1 views
-1

FB 웹 사이트에 FB 로그인을 통합하고 있으며 사용자의 이메일이 필요합니다. 여기에 코드의 일부가 나와있다.PHP - 그래프 API 2.8이 이메일을 요청하지 않습니다.

$fb = new Facebook\Facebook([ 
    'app_id' => 'app-id', 
    'app_secret' => 'secret', 
    'default_graph_version' => 'v2.8', 
]); 

$helper = $fb->getJavaScriptHelper(); 

try { 
    $accessToken = $helper->getAccessToken(); 
} catch(Facebook\Exceptions\FacebookResponseException $e) { 
    // When Graph returns an error 
    echo 'Graph returned an error: ' . $e->getMessage(); 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    // When validation fails or other local issues 
    echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
} 

if (isset($accessToken)) { 
    $fb->setDefaultAccessToken($accessToken); 

    try { 
    $requestProfile = $fb->get("/me?fields=name,email"); 
    $profile = $requestProfile->getGraphNode()->asArray(); 
    } catch(Facebook\Exceptions\FacebookResponseException $e) { 
    // When Graph returns an error 
    echo 'Graph returned an error: ' . $e->getMessage(); 
    } catch(Facebook\Exceptions\FacebookSDKException $e) { 
    // When validation fails or other local issues 
    echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
    } 

    print_r($profile); 
} 

내가 돌아 오는 것은 이름과 ID이다. 사용자에게 앱 사용 권한을 요청하는 팝업조차도 이메일을 요구하지 않습니다. 그리고 당연히 그것을 돌려주지는 않습니다.

나는 this과 많은 다른 질문을 보았지만 어느 솔루션도 저에게 효과적이지 않았습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

_ "사용자에게 앱 사용 권한을 부여하지 않아도 _을 (를) 요청하지 않았습니다."_는 로그인을 트리거하는 코드 부분에서 권한을 요청하지 않았 음을 의미합니다. – CBroe

+0

아 ... 뭔가있을 수 있습니다. 내가 자바 스크립트를 조사하자. – VeeK

답변

0

사용자 이메일을 얻기 위해 권한을 요청해야합니다.

가 참조; (권한 = [ '이메일', 'user_likes', 'USER_LOCATION', 'user_friends', 'user_birthday', 'user_hometown'] 예)

을 요청하는 방법을 볼 수 https://developers.facebook.com/docs/php/howto/example_facebook_login을 검토하십시오 예를 들어, 사용 권한 참조는 https://developers.facebook.com/docs/facebook-login/permissions이고 https://github.com/thephpleague/oauth2-facebook입니다.

+0

매우 좋은 조회수는 https://github.com/thephpleague/oauth2-facebook을 참조하십시오 ... –

+0

내 코드는 예제와 약간 다릅니다. 나는 같은 도우미를 사용하지 않고있다. 나는'$ fb-> get ("/ me? fields = name, email") '이 이메일을 요청하고 있지만 작동하지 않으므로 잘못된 것을 얻지 못한다. – VeeK

0

위의 의견에서 지적한 CBroe 덕분에 사용 권한은 PHP가 아닌 javascript에 설정되어 있어야합니다. 그것은 승인이 완료되고 당신이해야만했던 모든 정보를 받았을 때 PHP 코드가 실행되기 때문입니다. 그것을 해결하기 위해

, 나는

FB.login(function(response){ 
     // take action based on response 
}, {scope: 'public_profile, email'}); 

FB.login(function(response){ 
     // take action based on response 
}); 

을 변경 그리고 그것은 작동합니다. 감사합니다.

관련 문제