質問

In FB SDK 3.0, you could run $facebook->getUser() to get the user's Facebook UID.

SDK 4.0 doesn't have a BaseFacebook object any more; I can't see how to get the user ID off of a FacebookSession created by FacebookJavaScriptLoginHelper. How do you do it?

役に立ちましたか?

解決

If you already have an active session or an access token, you can do the following to get the user_id:

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

See this tutorial for information on using a session saved in a cookie or creating a new session. It's a long solution but this the easiest way to retrieve the user_id using the new SDK. It's advisable to save it in a session for easier retrieval.

他のヒント

As of PHP SDK v4.0.3 there's no way to get the user ID without doing a network request. This is unfortunate because the signed request already contains the user_id, so it seems silly to do a network request just for that one piece of data.

But, if you're willing to do the network request, $session->getSessionInfo()->getId() will retrieve the full session info from /debug_token, including the user ID.

You might prefer to do a FacebookRequest for /me, which will provide the user ID and the user's profile info. (But it's more typing.)

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

I use Facebook SDK 4.0.9. I needed to get the user id when making AJAX calls and my setup is as follows:

  • when constructing fb sdk wrapper, call FacebookSession::setDefaultApplication(<ID>, <SECRET>

  • defined a function get_user_id as follows:

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

getRawSignedRequestFromCookie is defined here https://github.com/facebook/facebook-php-sdk-v4/blob/master/src/Facebook/Helpers/FacebookSignedRequestFromInputHelper.php#L159-L165

I chose FacebookJavaScriptLoginHelper for convenience, but I think you can opt for any (I guess): https://github.com/facebook/facebook-php-sdk-v4/tree/master/src/Facebook/Helpers

If you already have an active session called '$session' then you just use:

$session->getUserId();

In my code I log on with Javascript SDK, then in 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';
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top