注销后返回用户ID的Facebook getuser()函数
-
22-10-2019 - |
题
我正在使用Facebook PHP SDK开发。
我想做到这一点,以便当用户从Facebook登录时,他们也会自动从我的网站上登录。
我使用以下代码来检测会话,使用会话cookie:
$facebook->getUser();
由于某种原因, getUser()
即使在他们的网站上登录Facebook之后,功能仍然返回用户的Facebook ID。
我是否首先使用另一个功能检测会话?
在官方文件示例中 这里, ,是他们的评论以下摘录:
// Get User ID
$user = $facebook->getUser();
// We may or may not have this data based on whether the user is logged in.
//
// If we have a $user id here, it means we know the user is logged into
// Facebook, but we don't know if the access token is valid. An access
// token is invalid if the user logged out of Facebook.
这使我相信Facebook的会话cookie会在Facebook注销后无法设置吗?
亲切的问候,
卢克
解决方案
我有同样的问题!
FB PHP SDK将这些东西保存到$ _Session中!当您的用户单击注销时,您可以这样删除它们:
$_SESSION['fb_'.APP_ID.'_user_id'] = '';
$_SESSION['fb_'.APP_ID.'_access_token'] = '';
尽管这不是最终解决方案,但现在可以使用。
我感谢对此的评论和解决方案!
其他提示
我想提供替代方案,以某种方式您不必处理会话内容。虽然,我必须警告您,这比清理会话要慢,因为它依赖于新请求。我们在下面的代码中所做的是在Facebook上检查令牌是否仍然有效。在这里:
try {
$facebook->api('/me','GET');
$logged = true;
} catch(FacebookApiException $e) {
$logged = false;
}
就我而言,我正在使用JavaScript SDK进行所有操作,因此我无法在注销时清理会话。但是在我的着陆页上,我需要进行工作以检查它,然后再将响应发送回响应。
如果您面对这样的事情,绝对是一个很好的解决方案。
问题似乎是在PHP-SDK中 basefacebook.php
在 line 567
protected function getSignedRequestCookieName() {
return 'fbsr'.$this->getAppId();}
此方法返回SDK正在寻找的cookie的名称。但是,JavaScript-SDK使用“ FBS_”前缀。将其更改为“ FBS_”,并且可以正常工作。
return 'fbs'.$this->getAppId();}
$facebook->destroySession();
要销毁会议,您也可以使用:$ facebook-> destroysession();
不隶属于 StackOverflow