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

Hen*_*rik 17 php facebook facebook-graph-api facebook-login

我正在使用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
Run Code Online (Sandbox Code Playgroud)

现在您可以看到,这种工作方式将每个页面转发到登录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/>" ;
}
Run Code Online (Sandbox Code Playgroud)

jhc*_*hen 19

如果我正确地读取您的代码,只有在没有返回会话时才进行重定向吗?根据Facebook的例子中的评论,即使你回来了会议,你也不能认为它仍然有效.只有尝试需要登录用户的API调用才能确定.这是我看到可靠地确定登录/注销状态的最佳方式.

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

  • 如果您已经存储了访问令牌并且正在使用它,那么这不起作用,因为API调用仍然可以在不抛出异常的情况下工作,但是当您将它们重定向到getLogoutUrl时,它只是将它们发送到Facebook的主页,而不是送你回到你的网站 (3认同)