8

更新私の個人の電子メール アドレスは何年も使用されていなかったようです。Facebook はそれを非アクティブとしてマークし、JSON の一部として返しませんでした。

この URL を使用して、クライアント側で Facebook でユーザーを認証しています。

https://www.facebook.com/dialog/oauth?
  client_id=xxx&
  redirect_uri=https://www.facebook.com/connect/login_success.html&
  scope=email

コードを受け取り、トークンと交換します。

https://graph.facebook.com/oauth/access_token?
  code=xxx&
  client_id=xxx&
  client_secret=xxx&
  redirect_uri=xxx

次に、トークンをサーバーに送信し、メールを含むユーザー情報を取得するために Fb グラフをフェッチします。

 https://graph.facebook.com/me?access_token=xxx

何らかの理由で、ユーザーの「情報」はすべて取得できますが、メールは取得できません

私は何を間違えましたか?

4

1 に答える 1

5

Facebookのドキュメントによると:

デフォルトでは、クエリを作成したときに、ノードまたはエッジのすべてのフィールドが返されるわけではありません。"fields" クエリ パラメータを使用して、返されるフィールド (またはエッジ) を選択できます。これは、API 呼び出しをより効率的かつ高速にするのに非常に役立ちます。

これは v2.4 から有効です (以前のバージョンではいくつかのデフォルト フィールドが取得されていました)。

新しいアプリを登録すると、email、public_profile、user_friends の 3 つの権限が自動的に (手動での確認なしで) 付与されます。あなたのコードでは「email」が範囲内にあるので(これは良いことです)、クエリを次のように変更してください:

https://graph.facebook.com/me?access_token=xxx&fields=email

おそらく、以前のバージョンの API で自動的に取得した public_profile フィールドが必要だったでしょう。そのために、「public_profile」をスコープに追加します。

https://www.facebook.com/dialog/oauth?
  client_id=xxx&
  redirect_uri=https://www.facebook.com/connect/login_success.html&
  scope=email,public_profile

次に、ユーザー名フィールドをクエリに追加します。

https://graph.facebook.com/me?access_token=xxx&fields=first_name,last_name,gender,email,timezone,age_range,verified

幸運を

于 2015-09-23T06:06:15.693 に答える