如何在没有任何身份验证的情况下获取用户的Facebook ID?

时间:2015-03-03 21:42:28

标签: php facebook facebook-graph-api facebook-php-sdk

我有一个小的Facebook页面标签应用程序(订阅表单),用户可以在其中输入他的电子邮件地址和名称,然后提交表单。我想从Facebook API获取登录用户的Facebook ID,所以我可以检查用户是否已经被注册。我相信为此我不需要任何权限或身份验证对话框来显示,但我无法获得任何有效的Facebook ID查询会话:( 这是我的代码(Javascript重定向仅用于测试):

<?php 
session_start();

header('Content-Type: text/html; charset=utf-8');

require_once( 'Facebook/HttpClients/FacebookHttpable.php' );
require_once( 'Facebook/HttpClients/FacebookCurl.php' );
require_once( 'Facebook/HttpClients/FacebookCurlHttpClient.php' );
require_once( 'Facebook/Entities/AccessToken.php' );
require_once( 'Facebook/Entities/SignedRequest.php');
require_once( 'Facebook/FacebookSession.php' );
require_once( 'Facebook/FacebookSignedRequestFromInputHelper.php');
require_once( 'Facebook/FacebookCanvasLoginHelper.php');
require_once( 'Facebook/FacebookRedirectLoginHelper.php' );
require_once( 'Facebook/FacebookRequest.php' );
require_once( 'Facebook/FacebookResponse.php' );
require_once( 'Facebook/FacebookSDKException.php' );
require_once( 'Facebook/FacebookRequestException.php' );
require_once( 'Facebook/FacebookOtherException.php' );
require_once( 'Facebook/FacebookAuthorizationException.php' );
require_once( 'Facebook/GraphObject.php' );
require_once( 'Facebook/GraphUser.php');
require_once( 'Facebook/GraphSessionInfo.php' );

use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\Entities\AccessToken;
use Facebook\Entities\SignedRequest;
use Facebook\FacebookSession;
use Facebook\FacebookSignedRequestFromInputHelper;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\Helpers\FacebookJavaScriptLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookOtherException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\GraphSessionInfo;

$appId = '123456789';
$appSecret = 'secret123456789';

FacebookSession::setDefaultApplication($appId , $appSecret);

$helper = new FacebookRedirectLoginHelper("https://www.facebook.com/mypage/app_123456789", $appId, $appSecret);
try {
    $session = $helper->getSessionFromRedirect();
}
catch(FacebookRequestException $ex) { } 
catch(\Exception $ex) { }

$loggedIn = false;

if (isset($session)){
if ($session) {
    $loggedIn = true;
    try {
      // Logged in

    } catch(FacebookRequestException $e) {

        echo "Exception occured, code: " . $e->getCode();
        echo " with message: " . $e->getMessage();

    }   

}
}
if (!$loggedIn){
  $loginUrl = $helper->getLoginUrl();
  echo '<script type="text/javascript">top.location.href = "'.$loginUrl .'";</script>';
}

echo "session: ".$session; //empty

这个Facebook PHP SDK V4对我来说有点新鲜,有人可以帮我解决如何正确设置它,获取用户ID吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您总是需要授权用户才能获取其ID。它将是一个“App Scoped ID”。您只能通过使用他的电子邮件来获取他的ID。

不确定“regged”是什么意思...你的意思是“注册”了?如果您希望用户输入电子邮件并检查他是否已经使用您的平台,为什么不忘记Facebook并查看他是否在使用该电子邮件的数据库中?你不需要使用Facebook API。当然,您需要在用户授权您的应用时存储他们的电子邮件,但这应该没问题。

此外,您应该使用自动加载器而不是无数的require语句,但这只是一个侧面说明。