我是否总是需要进行测试查询以确保会话有效?

时间:2012-02-08 19:13:48

标签: php facebook

我正在使用适用于Facebook Connect的JS SDK和PHP SDK的v3。在查看示例代码here时,有一个我想知道的部分(由于长度,我有点压缩)

// 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.

if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}

// Login or logout url will be needed depending on current user state.
if ($user)
  $logoutUrl = $facebook->getLogoutUrl();
else
  $loginUrl = $facebook->getLoginUrl();

注销代码的开头和位置的大评论与我有关。他们似乎暗示getUser()并不保证获取用户ID意味着一切都有效,您仍然必须再次联系Facebook(在此示例中仅获取用户个人资料信息)以完全验证外包是否正常。这是真的?

我问的理由是我想要删除代码(在这种情况下是不必要的后端请求)我不需要和我的pourposes我不需要每个页面加载的用户整个用户配置文件,我如果用户已登录,则只需要一个FB ID。

2 个答案:

答案 0 :(得分:1)

你的假设是正确的。在大多数情况下,调用$facebook->getUser();是一项测试。您将始终必须检查会话是否有效。

答案 1 :(得分:0)

如果您只需要fb用户ID,那么您只能这样做。

$user_id = $facebook->getUser();
if($user_id){
 //use this user id to proceed
}else{
 //user not logged in
}