Facebook JS / PHP SDK

时间:2012-02-21 19:46:52

标签: php javascript facebook sdk

所以我遇到了Facebook SDK的一些奇怪问题。我使用JS SDK作为PHP SDK。要记录用户,请使用以下内容:

<a href="/logout/" onclick="FB.logout ();">Log out</a>

点击该链接后,当我尝试执行任何JS SDK调用时,如:FB.getAuthResponse();它按预期返回null。

但是点击链接后,当我使用PHP SDK检查是否有人登录时,或者只是使用以下SDK功能:$ this - &gt; facebook - &gt; getAccessToken();它会返回一个有效的令牌,就像我仍然登录一样。

我在这里缺少什么? 顺便问一下,你需要我检查登录的一些PHP代码吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

PHP sdk将访问令牌保存到本地会话中。这是一个很大的问题。特别是在facebook令牌过期和本地SDK认为它仍处于活动状态的时候。我们使用的解决方案是每当我们需要用户数据时,我们会根据访问令牌检查它是否仍然有效。人们会认为这应该是SDK的一种mndatory行为(以保证一个活跃的令牌)但遗憾的是并非如此。 这是我们使用的代码片段。

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

$response = curl_get_file_contents($graph_url);
$decoded_response = json_decode($response);
//Check for errors
if ($decoded_response->error) {
  // check to see if this is an oAuth error:
  if ($decoded_response->error->type== "OAuthException") {
    // Retrieving a valid access token.
    $dialog_url= "https://www.facebook.com/dialog/oauth?"
    . "client_id=" . FB_APP_ID
    . "&redirect_uri=" . urlencode($redirect_url)
    . "&scope=" . implode(',', $permissions);
    exit("<script> top.location.href='" . $dialog_url ."'</script>");
  }
  else {
    //handle other error types
  }
else {
  return $facebook-getUser();
}

这是我们自己的getUser函数的一部分。希望它能帮助你实现自己的:)