在FB PHP SDK 4.0中获取Facebook用户ID

时间:2014-05-13 05:14:10

标签: facebook facebook-php-sdk

在FB SDK 3.0中,您可以运行$facebook->getUser()来获取用户的Facebook UID。

SDK 4.0不再具有BaseFacebook对象;我无法看到如何从FacebookJavaScriptLoginHelper创建的FacebookSession中获取用户ID。你是怎么做到的?

4 个答案:

答案 0 :(得分:7)

如果您已有活动会话或访问令牌,则可以执行以下操作以获取user_id:

// set session from cookie or via helper
$session = new FacebookSession( $session->getToken() );
$user_id = $session->getSessionInfo()->asArray()['user_id']
echo $user_id

有关使用保存在Cookie中的会话或创建新会话的信息,请参阅this tutorial。这是一个很长的解决方案,但这是使用新SDK检索user_id的最简单方法。建议将其保存在会话中以便于检索。

答案 1 :(得分:2)

从PHP SDK v4.0.3开始,如果没有网络请求,就无法获取用户ID。这是不幸的,因为the signed request already contains the user_id,所以为这一段数据做一个网络请求似乎很愚蠢。

但是,如果您愿意执行网络请求,$session->getSessionInfo()->getId()将从/debug_token检索完整的会话信息,包括用户ID。

您可能更喜欢为/me执行FacebookRequest,它会提供用户ID和用户的个人资料信息。 (但它打字更多。)

$me = (new FacebookRequest(
  $session, 'GET', '/me'
))->execute()->getGraphObject(GraphUser::className());
echo $me->getId();

答案 2 :(得分:0)

我使用Facebook SDK 4.0.9。 我需要在进行AJAX调用时获取用户ID,我的设置如下:

  • 构建fb sdk包装器时,请调用FacebookSession::setDefaultApplication(<ID>, <SECRET>

  • 定义了一个函数get_user_id,如下所示:

    public function get_user_id() {
        $sr = new SignedRequest((new FacebookJavaScriptLoginHelper())->getRawSignedRequestFromCookie());
        return $sr->getUserId();
    }
    

getRawSignedRequestFromCookie在这里定义https://github.com/facebook/facebook-php-sdk-v4/blob/master/src/Facebook/Helpers/FacebookSignedRequestFromInputHelper.php#L159-L165

为方便起见,我选择FacebookJavaScriptLoginHelper,但我认为您可以选择任何(我猜):https://github.com/facebook/facebook-php-sdk-v4/tree/master/src/Facebook/Helpers

答案 3 :(得分:0)

如果您已经有一个名为&#39; $ session&#39;的活跃会话然后你只需使用:

$session->getUserId();

在我的代码中,我使用Javascript SDK登录,然后使用PHP:

FacebookSession::setDefaultApplication($api_key, $api_secret);
$helper = new FacebookJavaScriptLoginHelper();
try {
    $session = $helper->getSession();
    $output = $session->getUserId();
} catch(FacebookRequestException $ex) {
    // When Facebook returns an error
    $output = '-1';
} catch(\Exception $ex) {
    // When validation fails or other local issues
    $output = '-2';
}