如何检查用户是否已连接到Facebook?

3

我希望将用户重定向到Facebook,而不是那些没有连接到Facebook的烦人用户。如何实现呢?我正在使用以下代码从Facebook获取数据。这段代码是基于WordPress在我的页面的第一行执行的。

this_code_php:

<?PHP

session_start();
    require 'facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'my_number_here',
  'secret' => 'my_number_here',
  'cookie' => true
));

// Get User ID
$user = $facebook->getUser();

if ($user) {
  $logoutUrl = $facebook->getLogoutUrl();

  //echo '$logout '.$logoutUrl;
} else 
{ $loginUrl = $facebook->getLoginUrl();
  //echo '$login '.$loginUrl;
 echo "<script type='text/javascript'>top.location.href = '$logoutUrl';</script>";

 }
?>

连接到Facebook和登录我的应用程序之间有所不同。 请注意,如果我知道用户已连接到Facebook(例如打开了Facebook选项卡),我希望自动将他重定向到我的页面,并显示所有Facebook数据。但是我不想通过Facebook登录页面打扰其他未注册Facebook的用户。如果他们已连接-好的-让我们简单地重定向到我的页面与Facebook数据。如果没有-忘记Facebook登录并避免Facebook数据-避免Facebook。问题在于以下行: echo "top.location.href = '$logoutUrl';";
程序的作用是什么? 如果用户已连接到Facebook-程序会自动重定向,用户不会知道是否已执行任何操作。 但是,如果用户未连接到Facebook,则程序将显示用户登录页面,即使用户未在Facebook上注册。
我想用以下行替换上面的行: if (/user is connected/) echo "top.location.href = '$logoutUrl';";
但是我不知道如何检查用户当前是否连接到Facebook?这是否可以在PHP中完成,还是必须链接PHP和Javascript?这有点困难。该如何处理?
3个回答

3

CBroe说得对。您必须在客户端检查用户状态。为了对CBroe的说法进行补充,该文档提供了一个有用的示例。

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    // the user is logged in and has authenticated your app
    var uid = response.authResponse.userID;
    var accessToken = response.authResponse.accessToken;
  } else if (response.status === 'not_authorized') {
    // the user is logged in to Facebook, 
    // but has not authenticated your app
  } else {
    // the user isn't logged in to Facebook.
  }
 });

我本来想在先前的回答下发表评论以支持它,但是评论表单忽略了换行符...


非常感谢 Go Hagiwara 和 Simon Germain 的回答。很遗憾无法在服务器端用 PHP 实现。 - Marek Rzewuski

1

另一个选项是用户使用 $facebook->getUser()。如果未登录 Facebook,则会返回 0。


1
如果用户连接了 Facebook 但未登录应用程序,我对这种情况很感兴趣。如果用户与 Facebook 连接,但未登录应用程序,则 $facebook->getUser() 总是返回 0。如果他/她已经连接到 Facebook,则 $facebook->getUser() 也会返回 0。 - Marek Rzewuski

0

对于尚未连接到您的应用程序的用户,您将获得绝对没有信息 - 甚至不知道他们当前是否已登录 Facebook。

一旦用户连接到您的应用程序,您可以使用 JavaScript SDK 中的 FB.getLoginStatus 来确定他们当前是否已登录 Facebook。

这必须在客户端完成,因为只有 JS SDK 能够进行跨域请求以检查在 facebook.com 域下设置的 cookie - 这在服务器端是不可能的。

一旦您在客户端确定了他们的状态,PHP SDK 就能够在下一个请求中获取此信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接