web-dev-qa-db-ja.com

Facebook GraphAPIがメールを返さない

私は次のコードを持っています:

$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...",
]

ご覧のとおり、$metaDatascopesには明らかにemailがあるため、権限の問題ではありません。それにもかかわらず、グラフユーザーは時々電子メールを持っていません(場合によっては持っていますが)。

これはなぜですか?また、どうすればこの問題を解決できますか?

7
Yahya Uddin

必要なフィールドをリクエストのURLに追加します。

https://graph.facebook.com/me?fields=email,name
8
Agu Dondo

まず、アクセストークンがメールに対するユーザーの許可を取得しているかどうかを確認します

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
4
Samuel Ivan

今日私が遭遇した可能性の1つは、email IDを使用してログインしていないアカウントを登録している場合、mobile numberloginに使用している可能性があり、プロファイルでも使用している可能性があります。 primary emailmobile numberに設定または設定されていません。この場合、facebookemailに対してnullを返します。

アカウントを更新し、primary emailsettingsの下のfacebook pageフィールドにメールを追加しました。その後、facebookからemail idを取得できました。

これが誰かを助けることを願っています。

ハッピーコーディング...

2
Abhinaw Kaushik

これらの手順を確認する必要があります。

  1. アクセストークンが電子メールに対するユーザーの許可を取得しているかどうかを確認します。アプリの開発者アカウントにログインし、ツール->グラフAPIエクスプローラーを使用して、メールに対するユーザーの権限を有効にします。

  2. facebookのバージョンを確認し、最新バージョンを使用してください。

  3. 以下のようにフェイスブックのログインスクリプトにメールスコープを追加します

    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
    });
    
2
Minu Alex

グラフAPIのバージョンを指定することでこの問題を解決しました。

リクエストしたフィールドfirst_name,last_name,email,picture

URLへ:https://graph.facebook.com/me

メールを返送しませんでした。

URLへ:https://graph.facebook.com/v2.9/me

メールを返しました。

お役に立てれば。

1
Eric Guan