6

私はメンバー注文システムに取り組んでおり、ユーザーが登録せずに Facebook に直接ログインできるようにしたいと考えています。

問題は、このアプローチのデータフローは何ですか? たとえば、Facebook は、システムに挿入できるようにユーザー アカウント / ID / メールまたはその他の情報を返しますか? それとも、ログインしていることを示す単なるセッションですか?

また、彼らの電話番号(注文確認用)を収集したいと思います。訪問者が Facebook アカウントでそれを特定しなかった場合、ケースをどのように処理しますか?

以下は調べた後のコードですが、会員IDしか返せないようですか?

<?php

    define('YOUR_APP_ID', 'YOUR APP ID');

    //uses the PHP SDK.  Download from https://github.com/facebook/php-sdk
    require 'facebook.php';

    $facebook = new Facebook(array(
      'appId'  => YOUR_APP_ID,
      'secret' => 'YOUR APP SECRET',
    ));

    $userId = $facebook->getUser();

    ?>

    <html>
      <body>
        <div id="fb-root"></div>
        <?php if ($userId) { 
          $userInfo = $facebook->api('/' . $userId); ?>
          Welcome <?= $userInfo['name'] ?>
        <?php } else { ?>
        <fb:login-button></fb:login-button>
        <?php } ?>


            <div id="fb-root"></div>
            <script>
              window.fbAsyncInit = function() {
                FB.init({
                  appId      : 'YOUR_APP_ID', // App ID
                  channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
                  status     : true, // check login status
                  cookie     : true, // enable cookies to allow the server to access the session
                  xfbml      : true  // parse XFBML
                });
            FB.Event.subscribe('auth.login', function(response) {
              window.location.reload();
            });
              };
              // Load the SDK Asynchronously
              (function(d){
                 var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
                 if (d.getElementById(id)) {return;}
                 js = d.createElement('script'); js.id = id; js.async = true;
                 js.src = "//connect.facebook.net/en_US/all.js";
                 ref.parentNode.insertBefore(js, ref);
               }(document));
            </script>

      </body>
    </html>
4

6 に答える 6

4

これがある行に気づいたでしょうか:

<?php if ($userId) { 
      $userInfo = $facebook->api('/' . $userId); ?>
      Welcome <?= $userInfo['name'] ?>
    <?php } else { ?>
    <fb:login-button></fb:login-button>
    <?php } ?>

$userId を使用する代わりに、次のことができます。

$userInfo = $facebook->api('/me','GET');

これにより、現在ログインしているユーザーに関する情報が得られます。

Facebook API によって返されるデータは、ユーザーがサイトにアクセス許可を付与するときに、ユーザーに要求するアクセス許可に依存します。ここでは、必要に応じて、返されるUser オブジェクトデータとそのそれぞれの権限 のリストを確認できます。https://developers.facebook.com/docs/reference/api/user/

携帯電話番号や電子メール アドレスなど、必要なデータの一部は Facebook では必須ではないため、登録フォームを使用するのが最善の方法かもしれません: https://developers.facebook.com/docs/plugins/登録/

登録プラグインを使用すると、ユーザーは Facebook アカウントを使用して簡単に Web サイトにサインアップできます。プラグインは、ページにドロップできるシンプルな iframe です。Facebook にログインすると、必要に応じて Facebook 情報が事前に入力されたフォームが表示されます。

登録プラグインを使用すると、Facebook API では利用できない追加情報 (誰かのお気に入りの映画など) を柔軟に要求できます。このプラグインを使用すると、Facebook アカウントを持っていないユーザー、または Facebook を使用してサイトにサインアップしたくないユーザーも、Facebook に接続しているユーザーと同じフォームを使用できます。これにより、2 つの別々のログイン エクスペリエンスを提供する必要がなくなります。

于 2013-10-15T15:38:24.767 に答える
2

次の URL を使用して、Facebook から取得できるすべての情報を確認できます。

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

Facebookから得られる情報を理解するのは簡単です。

私の個人的な提案は、Facebook 統合用の Java スクリプト API を使用することです。より便利であることがわかりました。Facebook グラフ API を使用して任意のユーザーに関する情報を取得するには、アクセス トークンが必要です。そのため、フローは明らかにそこから開始し、応答を処理した後に電話番号が Facebook アカウントにない場合は、各要求を初期化する必要があります。 .

于 2013-10-17T12:19:14.690 に答える
1

現在、プロジェクトで Facebook SDK for PHP を使用しています。ユーザー データを要求する方法は次のとおりです。

// If user is not logged in, set the login URL asking for permissions
if( $userId == 0 ) {
      // Generate a login url
      $url = $facebook->getLoginUrl( array( 'scope' => 'email, user_status' ) );
      ... Your Login button ...
} else {
      // Get user's info
      $userdata = $facebook->api( '/me' );
      $data = array(
            'first_name'    => $userdata['first_name'],
            'last_name'     => $userdata['last_name'],
            'username'      => $userdata['username'],
            'email'         => $userdata['email'],
            'languages'     => $userdata['languages'],
            'locale'        => $userdata['locale'],
            'timezone'      => $userdata['timezone'],
            'gender'        => $userdata['gender'],
            'location'      => $userdata['location'],
            'hometown'      => $userdata['hometown'],
      );
      print_r( $data );
}
于 2013-10-21T22:59:37.643 に答える
1

これは直接的な答えではありませんが、github でこの cake-php プラグインの実装を調べることをお勧めします。

https://github.com/webtechnick/CakePHP-Facebook-Plugin

于 2013-10-17T12:40:48.210 に答える
1

OpauthHybridAuthなど、十分にテストされたライブラリを使用することをお勧めします。

それらを使用すると、Facebook が保存した追加データを要求できます。Google や Twitter などの他のサイトを認証に使用することもできます。

Facebook の推奨事項に従ってください。一度にすべての権限を要求しないでください。少なくとも、Facebook ユーザーとしてログインしてみて、許可を求めるダイアログが 1 つだけユーザーに表示されるかどうかを確認してください。一部の権限 (イベントの作成など) は、ユーザーの承認を複数回要求します。確実にあなたのサイトをやめさせる方法です。

メールアドレスが Facebook によって検証されているかどうか確信が持てないようです。

于 2013-10-17T03:18:58.330 に答える