2016-12-04 4 views
-1

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

_ "ユーザーにアプリケーションへのアクセス権を与えるよう要求するポップアップでも、電子メールを要求しない" _ - つまり、_you_は、ログインをトリガーするコードの部分で許可を求めなかったことを意味します。 – CBroe

+0

あなたは何かに乗っているかもしれません。私はJavaScriptを調査させてください – 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 
}); 

を変更し、それが機能するようになりました。ありがとう

関連する問題