使用PHP通过Facebook登录我的系统

时间:2013-10-13 02:36:06

标签: javascript php facebook facebook-graph-api

我正在制作会员订购系统,我想让用户无需注册,他们可以直接登录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>

6 个答案:

答案 0 :(得分: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返回的数据取决于您向用户请求的权限。 在这里,您可以找到用户对象数据的列表,如果需要,可以返回该数据以及相应的权限。 https://developers.facebook.com/docs/reference/api/user/

由于您需要的某些数据,例如手机号码或电子邮件地址,在Facebook上不是强制性的,也许最适合您的方法是使用注册表格: https://developers.facebook.com/docs/plugins/registration/

  

注册插件可让人们轻松注册您的网站   用他们的Facebook帐户。该插件是一个简单的iframe   可以放入你的页面。登录Facebook后,人们会看到一个表单   在适当的情况下,这预先填写了他们的Facebook信息。

     

注册插件让您可以灵活地索取   Facebook API无法提供的其他信息   (例如,某人最喜欢的电影)。该插件还可以让人们   谁没有Facebook帐户 - 或者不想注册   您的网站使用Facebook - 使用与其相同的表单   与Facebook连接。这样就无需您提供   两个单独的登录体验。

答案 1 :(得分:2)

您可以使用以下网址查看您可以从Facebook获得的所有信息。

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

很容易理解我们可以从Facebook获得的信息。

我的个人建议是坚持使用java-script API进行Facebook集成,我发现它更有用。 要使用Facebook图形API来获取有关任何用户的信息,您将需要一个访问令牌,因此流量显然应从那里开始,然后初始化您的每个请求,如果在处理完您的响应后电话号码不在Facebook帐户中应该以另一种方式请求电话号码, 我希望上面的URL可以帮助您了解您可以向Facebook请求的所有用户信息。

答案 2 :(得分:1)

我建议您使用经过良好测试的图书馆,例如OpauthHybridAuth

通过它们,您可以要求Facebook存储的任何额外数据。您还可以使用其他网站(如Google或Twitter)进行身份验证。

请务必遵循Facebook recommendations,并且不要立即要求所有权限。至少,尝试以Facebook用户身份登录,看看是否只向用户显示了一个要求权限的对话框。某些权限(例如,创建事件)不止一次要求用户授权。这是让他们退出你网站的可靠方法。

看到它看起来像you can't be sure that the email address has been verified by Facebook

答案 3 :(得分:1)

虽然这不是一个直接的答案我会建议你在github研究这个cake-php插件的实现

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

答案 4 :(得分:1)

如果您使用PHP,为什么不使用FB提供的PHP包装器API而不是JS。 我一直在使用HybridAuth作为我的PHP项目,你应该尝试一下,好处是,你可以轻松添加更多提供商,如谷歌,Twitter,而不必去当您认为是时候整合更多社交功能时,通过每个API。

答案 5 :(得分: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 );
}