从访问令牌获取Facebook用户(PHP SDK 3.0.1)

时间:2011-06-21 16:15:46

标签: php facebook api sdk

我有一个应用程序利用它自己的登录和facebook登录相结合。 我使用自己的会话和cookie来记住用户。 我想记住facebook用户,但没有offline_access,所以我想为facebook用户设置我自己的cookie,当他们返回时只是从facebook获取新的access_token,因为他们已经授权了应用程序。

当用户第一次登录时我设法做了所有这些,但是当他们回来时我检测到一个cookie并且我得到一个有效的新access_token我不能把它放在facebook会话中。我使用PHP SDK 3.0.1并且有一个函数

  

$ this-> fb-> getUserFromAccessToken($ token)

在base_facebook.php中,但是当我使用它时它只会引发服务器错误。 (fb是我的类,它扩展了Facebook类,$ token是有效的新标记)

当我使用

  

$这 - > FB->的getUser()

它只返回0.

我知道我可以从

获取信息
  

https://graph.facebook.com/me?access_token= $的access_token

但我需要以某种方式把它放在facebook会话中

此外,base_facebook.php中有一个适合我的功能

  

$这 - > FB-> setAccessToken($的access_token);

所以我可以将令牌放在类中但它可以工作但是当我之后调用getUser()时它仍然返回0

任何帮助表示赞赏 谢谢!

2 个答案:

答案 0 :(得分:8)

getUserFromAccessToken()函数不接受任何参数。该函数从已设置的访问令牌返回用户ID。 getUserFromAccessToken()的函数定义如下所示。

protected function getUserFromAccessToken() {
    try {
        $user_info = $this->api('/me');
        return $user_info['id'];
    } catch (FacebookApiException $e) {
        return 0;
    }
}

如果您想从访问令牌中找出用户ID,您需要先设置访问令牌,然后调用函数getUser()。代码如下所示。

$facebook->setAccessToken($access_token);
$user_id = $facebook->getUser();

答案 1 :(得分:0)

好吧,我遇到了类似的问题:How to properly handle session and access token with Facebook PHP SDK 3.0?

你可以看到我如何处理会话。由于新的PHP SDK你不知何故无法直接编辑Facebook的会话。如果您还通过签名请求或JS SDK获得新的访问令牌,您可以使用与我类似的方法。

关于用户丢失信息的问题似乎是通过IE iFrame problem解决的,但我不确定我的方法是否也适用于fb->getUser()