質問

グラフAPIを使用していますが、ログインユーザーのメールアドレスを取得する方法を理解できません。

グラフのイントロは、「グラフAPIは、通常、名前、メールアドレス、プロフィール写真、誕生日など、サイトのサインアップフォームで要求するすべての基本アカウント登録データへのアクセスを提供できます」

すべてがうまくいきますが、その情報にアクセスするにはどうすればよいですか?

これは私がこれまでに持っているものです:

$json = $facebook->api('/me');

$first = $json['first_name']; // gets first name
$last = $json['last_name'];
役に立ちましたか?

解決

ユーザーの電子メールアドレスを取得する唯一の方法は、電子メールフィールドの拡張許可を要求することです。ユーザーはこれを許可する必要があり、ユーザーの友達の電子メールアドレスを取得できません。

http://developers.facebook.com/docs/authentication/permissions

Authダイアログへの通話のget stringでscope = emailを渡してFacebook Connectを使用している場合は、これを行うことができます。

を使用することをお勧めします SDK file_get_contentsの代わりに、実行がはるかに簡単になります oauth 認証。

他のヒント

// Facebook SDK v5 for PHP
// https://developers.facebook.com/docs/php/gettingstarted/5.0.0

$fb = new Facebook\Facebook([
  'app_id' => '{app-id}',
  'app_secret' => '{app-secret}',
  'default_graph_version' => 'v2.4',
]);

$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
$response = $fb->get('/me?locale=en_US&fields=name,email');
$userNode = $response->getGraphUser();
var_dump(
    $userNode->getField('email'), $userNode['email']
);

Open Base_facebook.php関数でAccess_Tokenを追加します getLoginUrl()

array_merge(array(
                  'access_token' => $this->getAccessToken(),
                  'client_id' => $this->getAppId(),
                  'redirect_uri' => $currentUrl, // possibly overwritten
                  'state' => $this->state),
             $params);

電子メールの許可に範囲を使用します

if ($user) {
   echo $logoutUrl = $facebook->getLogoutUrl();
} else {
   echo $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream'));
}

ユーザーのメールを取得するには、Facebookアカウントを使用してユーザーにログインする必要があります。 email 許可。そのためにFacebook PHP SDK(Githubを参照してください) 次のように。

最初に、ユーザーが既にログインしているかどうかを確認します。

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));

$user = $facebook->getUser();
if ($user) {
    try {
        $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        $user = null;
    }
}

彼がそうでない場合、あなたはログインリンクを表示することができます email 許可 :

if (!$user) {
    $args = array('scope' => 'email');
    echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>';
} else {
    echo '<a href="' . $facebook->getLogoutUrl() . '">Logout</a>';
}

彼が電子メールに記録されているとき、 $user_profile 配列。

それが役立つことを願っています!

ログインしたユーザーのプロフィールからメールアドレスを取得できます。これがコードスニペットです

<?php

    $facebook = new Facebook(array(
      'appId'  => $initMe["appId"],
      'secret' => $initMe["appSecret"],
    ));

    $facebook->setAccessToken($initMe["accessToken"]);
    $user = $facebook->getUser();

    if ($user) {
        $user_profile = $facebook->api('/me');
        print_r($user_profile["email"]);
    }
?>

これらのコードブロックをステータス返信時に追加するだけで、クエリ文字列オブジェクトの渡しを開始します{}。 JavaScript開発者の場合

SDKを初期化した後。

ステップ1://ログインステータスを取得します

$(document).ready(function($) {
    FB.getLoginStatus(function(response) {
        statusChangeCallback(response);
        console.log(response);
    });
  });

これにより、ドキュメントの負荷を確認し、ユーザーがログインしているかどうかをログインステータスチェックします。

次に、関数 CheckLoginState 呼び出され、応答は渡されます StatusChangecallback

function checkLoginState() {
    FB.getLoginStatus(function(response) {
      statusChangeCallback(response);
    });
  }

ステップ2:ステータスから応答データを取得しましょう

function statusChangeCallback(response) {
    // body...
    if(response.status === 'connected'){
      // setElements(true);
      let userId = response.authResponse.userID;
      // console.log(userId);
      console.log('login');
      getUserInfo(userId);

    }else{
      // setElements(false);
      console.log('not logged in !');
    }
  }

これもあります ユーザーID これは変数に設定されており、次にa getuserinfo FUNCは、Graph-APIを使用してユーザー情報を取得するために呼び出されます。

function getUserInfo(userId) {
    // body...
    FB.api(
      '/'+userId+'/?fields=id,name,email',
      'GET',
      {},
      function(response) {
        // Insert your code here
        // console.log(response);
        let email = response.email;
        loginViaEmail(email);
      }
    );
  }

通過した後 ユーザーID 議論として、関数はそれに関連するすべての情報を取得します ユーザーID. 。注:私の場合、メールを探していました。電子メールでのみユーザーを記録できる関数を実行できるようにしました。

//電子メールでログインします

function loginViaEmail(email) {
    // body...
    let token = '{{ csrf_token() }}';

    let data = {
      _token:token,
      email:email
    }

    $.ajax({
      url: '/login/via/email',    
      type: 'POST',
      dataType: 'json',
      data: data,
      success: function(data){
        console.log(data);
        if(data.status == 'success'){
          window.location.href = '/dashboard';
        }

        if(data.status == 'info'){
          window.location.href = '/create-account'; 
        }
      },
      error: function(data){
        console.log('Error logging in via email !');
        // alert('Fail to send login request !');
      }
    });
  }

https://graph.facebook.com/me

現在ログインしているユーザーに関する情報を提供しますが、OAuthトークンを提供する必要があります。見る:

http://developers.facebook.com/docs/reference/api/user

プロファイル内の電子メールは、拡張許可を使用して取得できますが、FBのログインに使用されるメールを取得することはできないと思います。私のアプリでは、リストにユーザーのMulitple FBアカウントを表示したかったのですが、FBアカウントのログインメールをそれぞれのアカウントの一意の識別子として表示したかったのですが、FBからそれを取り出すことができませんでした。ユーザープロファイルの主要な電子メールですが、私の場合は私のログインメールと私の主要な電子メールが異なります。

Facebookアプリケーションが公開されていることを確認してください。電子メールのデータを受信するには、public_profileとuser_friendsアプリを公開する必要があります。

開発目的で後で無効にして、電子メールフィールドを取得できます。

次のツールは、開発中に役立ちます。

アクセストークンデバッガー:詳細については、アクセストークンに貼り付けます

https://developers.facebook.com/tools/debug/accestoken/

グラフAPIエクスプローラー:アクセストークンを貼り付けた後、グラフAPIにテストリクエストをテストします

https://developers.facebook.com/tools/explorer

APIのバージョン番号を次のようなものとして完全に指定してください "v2.11" そしてそうではありません "2.11"

これが間違っている場合、それがデフォルトであることがわかりませんが、逃したときにメールを取得しようとして奇妙なエラーがいくつかありました v.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top