问题与标题相同。我使用最新的php-sdk(v3.1.1)来操作服务器端身份验证流程。
Chrome中有2个标签,一个是我的Facebook页面,另一个是php测试页面。这两个问题多次发生:
$facebook->getUser()
仍会返回0。$facebook->getUser()
即使在我退出时仍会返回ID。我必须解决此问题:尝试使用提供的access_token启动图表API请求,并检查是否$response->error->type == "OAuthException"
以确保有活动会话。
有没有办法稳定使用$facebook->getUser()
""?我通过SO搜索了很多但是还没找到php-sdk 3.1.1的最佳答案。
非常感谢任何帮助。感谢。
答案 0 :(得分:9)
<强>登录。强>
根据{{3}},即使您已注销,getUser()
也会返回userId,但会将Cookie与FB帐户相关联。
要检测用户是否已登录,您应该使用
$user = $facebook->getUser();
//Check Access token
if ($user) {
try {
$user_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
$user = null;
}
}
if ($user) {
//logged-in
} else {
//not logged-in
}
要登录您的应用,请让用户通过关注此网址在您的应用中而不是在相邻标签上登录(确保您根据应用执行的预期操作传递documentation example of FB SDK):< / p>
$loginUrl = $facebook->getLoginUrl(
'scope' => ...
);
退出。似乎您的PHP服务器每个会话都存储了一些访问权限值,因此即使您在浏览器中注销,您的服务器仍然可以使这些令牌有效。实际上,我不知道,它是错误还是功能,但在用户注销后它们不会被Facebook销毁。
要销毁这些令牌,我正在使用这些:
$facebook->destroySession();
每当用户通过$facebook->getLogoutUrl()
注销时,我都会调用它;