Oauth を使用して、自分の Web サイトに Facebook のサインアップ/ログインをセットアップしました。引き戻されたデータの 1 つはメールで、API への呼び出しのスコープに含めました。
http://www.facebook.com/dialog/oauth?client_id=[appID]&redirect_uri=[encoded_URL]&scope=email,user_likes,publish_stream
これは、次のコードを含むページにリダイレクトされます。
$code = $_GET['code'];
$tokenURL = "https://graph.facebook.com/oauth/access_token?client_id=[appID]&redirect_uri=[encoded_url]&client_secret=[secret_key]&code=" . $code;
// request access token
//use curl and not file_get_contents()
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, $tokenURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$accessToken = curl_exec($ch);
curl_close($ch);
$graphURL = "https://graph.facebook.com/me?" . $accessToken;
// request user data using the access token
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, $graphURL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$tempUser = curl_exec($ch);
curl_close($ch);
//decode the json array to get user data
$user = json_decode($tempUser);
//store user data
$firstName = cleanWords($user->first_name);
$lastName = cleanWords($user->last_name);
$email = cleanEmail($user->email);
これは以前は正常に機能していましたが、ユーザーが最初にアプリを使用するときに電子メールを提供する許可を与えたとしても、JSON オブジェクトで電子メールが返されなくなっていることが突然わかりました。API に変更があったため、メールを別の方法で処理する必要がありますか? ユーザーがユーザー設定でメールをアプリと共有する明示的な許可を与えていない場合、メールは返されないという投稿を見ましたが、アカウントにそのような設定が見つかりませんでした。
それが問題かどうかをテストできるように、誰かがその設定がどこにあるのか教えてください。ありがとう、
更新: 新しい Facebook API を使用するようにコードを完全に書き直すことで、これが機能するようになりました。