私は次のコードを持っています:
$fb = new Facebook([
'app_id' => $appId,
'app_secret' => $appSecret,
'default_graph_version' => 'v2.9',
]);
$oAuth2Client = $fb->getOAuth2Client();
$tokenMetaData = $oAuth2Client->debugToken($accessToken);
dump($tokenMetaData);
$graphUser = $fb->get('/me?fields=first_name,last_name,email', $accessToken)->getGraphUser()->asArray();
dump($graphUser);
上記の出力は次のとおりです。
$ metaData:
[
"app_id" => "..."
"application" => "My App Name"
"expires_at" => "2017-07-01 11:40:09.000000"
"is_valid" => true
"issued_at" => "2017-05-02 11:40:09.000000"
"metadata" => array:2 [
"auth_type" => "rerequest"
"sso" => "ios"
]
"scopes" => array:2 [
0 => "email"
1 => "public_profile"
]
"user_id" => "102..."
]
}
$ graphUser:
array:3 [
"first_name" => "John"
"last_name" => "Smith"
"id" => "102...",
]
ご覧のとおり、$metaData
のscopes
には明らかにemail
があるため、権限の問題ではありません。それにもかかわらず、グラフユーザーは時々電子メールを持っていません(場合によっては持っていますが)。
これはなぜですか?また、どうすればこの問題を解決できますか?
必要なフィールドをリクエストのURLに追加します。
https://graph.facebook.com/me?fields=email,name
まず、アクセストークンがメールに対するユーザーの許可を取得しているかどうかを確認します
https://graph.facebook.com/me/permissions?
access_token=(access-token)
&debug=all
回答にこのコンテンツが表示されない場合:
{
"data": [
{
"permission": "email",
"status": "granted"
},
{
"permission": "public_profile",
"status": "granted"
}
]
}
たぶんあなたのアクセストークンを取得する際に私はメールの所有権を要求しません:要求にscope = emailを追加します
https://www.facebook.com/v2.10/dialog/oauth?
client_id=(app-id)
&redirect_uri=(redirect-uri)
&scope=email
今日私が遭遇した可能性の1つは、email ID
を使用してログインしていないアカウントを登録している場合、mobile number
をlogin
に使用している可能性があり、プロファイルでも使用している可能性があります。 primary email
がmobile number
に設定または設定されていません。この場合、facebook
はemail
に対してnullを返します。
アカウントを更新し、primary email
のsettings
の下のfacebook page
フィールドにメールを追加しました。その後、facebook
からemail id
を取得できました。
これが誰かを助けることを願っています。
ハッピーコーディング...
これらの手順を確認する必要があります。
アクセストークンが電子メールに対するユーザーの許可を取得しているかどうかを確認します。アプリの開発者アカウントにログインし、ツール->グラフAPIエクスプローラーを使用して、メールに対するユーザーの権限を有効にします。
facebookのバージョンを確認し、最新バージョンを使用してください。
以下のようにフェイスブックのログインスクリプトにメールスコープを追加します
app.get(
'/auth/facebook',
passport.authenticate('facebook', {
scope: ['user_location', 'email', 'user_friends']
})
);
または
FB.login(function(response) {
// your ajax script
},{
scope: 'email',
return_scopes: true
});
グラフAPIのバージョンを指定することでこの問題を解決しました。
リクエストしたフィールドfirst_name,last_name,email,picture
URLへ:https://graph.facebook.com/me
メールを返送しませんでした。
URLへ:https://graph.facebook.com/v2.9/me
メールを返しました。
お役に立てれば。