0

考虑以下来自 developer.facebook.com 的代码片段

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    // the user is logged in and has authenticated your
    // app, and response.authResponse supplies
    // the user's ID, a valid access token, a signed
    // request, and the time the access token 
    // and signed request each expire
    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.
  }
 });

接下来,考虑以下

$facebook = new Facebook($config);              

$user = $facebook->getUser();
$userdata = null;
if($user)
{
    try{
        $userdata = $facebook->api('/me');
    }catch(FacebookApiException $e){
        $e->getMessage();
    }
}

$loginUrl   = $facebook->getLoginUrl(array('scope' => $scope);
if(!$userdata)
{                   
    //redirect to login
}

我的第二个代码正在做第一个代码承诺做的所有事情。那么我为什么要使用第一种方法呢?

4

1 回答 1

1

首先,这是您在这里谈论的两种完全不同的方法/技术:

而第一个是 JS SDK 的一部分,因此在客户端,第二个使用 PHP SDK 工作在服务器端

尽管只要在您的域下为他们设置了 cookie,您就可以在服务器端识别用户,但 PHP SDKgetUser方法在这些 cookie 消失后无法识别用户的重复访问。

然而,JS SDK 能够在客户端发出跨域请求——因此即使在您的域下不再设置任何 cookie,它也可以调用 facebook.com 并确定用户的登录状态。

如果你调用getLoginUrl并自动将用户重定向到那里,如果getUser没有给出用户id,那么最终效果基本相同。但是这样一来,用户会注意到重定向到 FB 并返回到您的站点,而 JS SDK 在后台“静默”地完成所有这些。

如果用户之前没有连接到您的应用程序,它将通过登录对话框提示用户——JS SDKFB.getLoginStatus但是会为您提供“not_authorized”——如果您现在一个已连接到的用户,这将很有帮助您之前的应用程序,但不想打扰其他用户强制登录对话框。对于 PHP SDK,他们最近引入了一个方法getLoginStatusUrl,它的作用相同——但它仍然需要重定向。

于 2013-07-24T08:45:58.837 回答