问题与标题相同。我正在使用最新的 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 的最佳答案。
非常感谢任何帮助。谢谢。
-
登录。根据FB SDK的文档示例,即使您注销,
getUser()
也会返回userId,但具有与FB帐户关联的cookie。要检测用户是否登录,您应该使用$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 }
若要登录应用,请让用户按照以下 URL 登录到你的应用,而不是在相邻选项卡上登录(确保根据应用执行的预期操作传递范围):
$loginUrl = $facebook->getLoginUrl( 'scope' => ... );
-
注销。似乎您的 PHP 服务器在每个会话中存储了一些访问令牌值,因此即使您在浏览器中注销,您的服务器仍然具有这些令牌有效。实际上,我不知道是错误还是功能,但是它们在用户注销后不会被Facebook销毁。
为了销毁这些令牌,我正在使用这些:
$facebook->destroySession();
每次用户注销时,我都会调用它
$facebook->getLogoutUrl()
;