我有一个应用程序,它结合了自己的登录和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()
。