Facebook PHP SDK - 如何知道$ facebook-> getUser()是否是我需要的用户?

时间:2014-04-27 16:42:46

标签: php facebook facebook-graph-api facebook-php-sdk

用几句话来解释这是非常棘手的,所以让我更准确一点。

我有一个网站可选择连接到Facebook以提供更多功能。对于这些功能,该网站通过图形API提取一些信息:基本资料+朋友。

有些用户直接与Facebook连接,而有些用户则以更经典的方式连接他们的登录名/密码。

对于那些使用他们的登录名和密码连接,并希望将他们的帐户连接到Facebook的人,我按照常规方式使用php SDK。改编自facebook's github

// 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');
    $user_friends = $facebook->api('/me/friends');
  } 

  catch (FacebookApiException $e) 
  {
    error_log($e);
    $user = null;
  }
}

else
{
    header('Location:'.$facebook->getLoginUrl());
}

问题是,如果用户从朋友的设备连接,则可能是浏览器连接到他朋友的Facebook,而不是我的用户。或者可能根本没有连接到Facebook的用户。

因此,$ facebook-> getLoginUrl()不会连接到我的用户的Facebook,而是连接到他的朋友。它非常烦人,因为如果他的朋友从未连接到我的应用程序,它会弹出自动化对话框...

或者,如果没有关联用户,则首先要求连接到某个Facebook帐户。

在这两种情况下,我宁愿不通过loginUrl连接到Facebook并使用令牌(存储在数据库中)来访问所需的数据。尽管如此,这些令牌仅持续60天,所以每次用户可以通过loginUrl连接时,它会更好,因为它会刷新令牌到期日期。

最后,我的问题是:是否可以在重定向到loginUrl之前知道用户的ID,或者知道是否没有用户连接到facebook?

或者是否有其他解决方案可以避免提示身份验证对话框?

1 个答案:

答案 0 :(得分:0)

由于您使用第三方登录系统,我会说您没有真正处理敏感信息。很可能是你处理某种社区网络。我不会担心你面临的问题,因为如果用户不希望有人看到敏感信息,他们会从Facebook注销。虽然你可以做的解决办法是清除facebook cookies并强迫网站签名。但是你的用户可能不喜欢这样。所以你可以这样做..

>>clear face book cookies
>>ask login info
>>relog into facebook

重新进入面子书可能有点棘手,但我相信你可以搞清楚。

最终确定您的问题是否可以在重定向到登录URL之前知道用户ID,答案是肯定的。只需检查facebook cookies并在编码时对其进行解码。