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

时间:2012-12-03 12:51:18

标签: php facebook

我想重定向他们连接到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>";

 }
?>

将CONNECTING到facebook和LOGGING与我的应用程序有区别。 请注意,如果我知道用户已连接到Facebook(例如已打开Facebook标签),我想自动将他重定向到我的页面,包含所有Facebook数据。但我不会打扰Facebook登录页面的其他用户(不是Facebook注册)。如果他们已连接 - 好的 - 让我们只需用Facebook数据重定向到我的页面。如果他们不是 - 忘记Facebook登录并忘记Facebook数据 - 避免Facebook。问题是线: echo“top.location.href ='$ logoutUrl';”;

什么程序呢? 如果用户连接到Facebook - 程序接下来重定向,用户不知道是否采取了任何操作。 但是,如果用户没有连接到显示用户登录页面的Facebook程序,即使是用户,他们也没有在Facebook上注册。

我想用这一行替换上面的行:   if(/ 用户已连接 /)echo“top.location.href ='$ logoutUrl';”;

但我不知道如何检查用户目前是否已连接到Facebook?如果有可能在PHP或我必须链接PHP和Javascript,这有点困难。怎么做?

3 个答案:

答案 0 :(得分: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.
  }
 });

我想将此作为对先前答案的评论发布以支持它,但评论表单忽略了换行符...

答案 1 :(得分:1)

另一种选择是用户使用$ facebook-&gt; getUser()。如果没有登录Facebook,则返回0。

答案 2 :(得分:0)

对于尚未连接到您应用的用户,您绝对不会获得任何信息 - 即使他们当前是否登录到Facebook。

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

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

您已经确定了客户端的状态,PHP SDK可以在下一个请求中接收它。