在FB SDK 3.0中,您可以运行$facebook->getUser()
来获取用户的Facebook UID。
SDK 4.0不再具有BaseFacebook对象;我无法看到如何从FacebookJavaScriptLoginHelper创建的FacebookSession中获取用户ID。你是怎么做到的?
答案 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';
}