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


Getting Facebook user from access token (PHP SDK 3.0.1)

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

当用户第一次登录时,我成功地完成了所有这些,但当他们回来时,我检测到一个cookie,并获得了一个有效的新访问权限,我无法将其放入facebook会话。我使用PHP SDK 3.0.1,并且有一个函数

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

在base_facebook.php中,但当我使用它时,它只会给我一个服务器错误。(fb是我的类,它扩展了facebook类,$token是有效的新令牌)

当我使用时

$this->fb->getUser()

它只返回0。

我知道我可以从获得信息

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

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

此外,base_facebook.php中有一个函数适用于我的

$this->fb->setAccessToken($access_token);

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

感谢任何帮助谢谢

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();

我也遇到过类似的问题:如何使用Facebook PHP SDK 3.0正确处理会话和访问令牌?

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

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