如何检查用户是否使用新的Facebook php api登录

我正在使用 PHP API 将旧的 FB 应用程序迁移到新的图形 API

我有两个页面:公共页面(不需要用户登录)和私人页面(需要用户登录)

因此,我的应用程序中每个php页面的代码都按如下方式工作:

if (this_page_requires_user_login){
      $facebook = new Facebook(...) ;
      $session = $facebook->getSession ;
      if (!$session){
              $url =$facebook.getLoginUrl(array(next => current_page );
              echo "<fb:redirect url=$url/>" ;

}
// the rest of the code continues here

现在,如您所见,这种工作方式将每个页面转发到登录URL,虽然它工作正常,但它也很慢,并将&session={bla}字符串附加到非常单个的url。

我需要一种方法来检查用户已经登录的位置,然后再将他重定向到登录页面。但是我在php api中找不到这样的方法。最好的方法是什么?

编辑

这似乎可以解决问题

if ($session) {
  try {
    $me = $facebook->api('/me');
    if ($me) {
       // here comes your code for user who is logged in
    }
  } catch (FacebookApiException $e) {
    login()
  }
}else{
 login()
}

function login(){

  $url =$facebook.getLoginUrl(array(next => current_page );


      echo "<fb:redirect url=$url/>" ;
}

答案 1

如果我正确阅读了您的代码,则只有在没有返回会话的情况下,您才会进行重定向吗?根据Facebook示例中的评论,即使您恢复了会话,您也不能假设它仍然有效。只有尝试需要登录用户的 API 调用,您才能确定。这是我见过的可靠地确定登录/注销状态的最佳方法。

if ($session) {
  try {
    $me = $facebook->api('/me');
    if ($me) {
      //User is logged in
    }
  } catch (FacebookApiException $e) {
    //User is not logged in
  }
}

答案 2

推荐