2012-01-24 48 views
0

我正在使用以下代码来验证用户是否已登录。虽然用户可以登录,但他们必须点击登录按钮两次。此外,有时甚至在他们点击登录按钮两次之后,我的页面的“用户信息”部分(页面中比内容更早)显示它们已注销,而实际页面显示它们已登录。PHP SDK需要两次登录...不首先识别

这是代码。有人可以提出更好的方式来处理登录吗?

function isLoggedIn($facebook) { 
    if (isset($facebook) and $facebook->getUser() != 0) { 
     // UserID exists, but user may still not be logged in. Let's check: 
     try { 
      $facebook->api('/me', 'GET'); 
      // If this succeeds, then they are logged in. 
      return true; 
     } catch(FacebookApiException $e) { 
      // Some kind of error, so not logged in. 
      if(session_id() === '') 
       session_destroy(); 
      return false; 
     } 
    } else { 
     if(session_id() === '') 
      session_destroy(); 
     return false; 
    } 
} 

谢谢!

+1

工作你的应用在Facebook(Canvas Page)上? – ori

+0

不,这是一个独立的网站。 –

+0

我有完全相同的问题!我发现没有答案的任何地方:(你有没有得到任何与此? – Chud37

回答

0
$facebook = new Facebook(array(/* the data */)); 
$user = $facebook->getUser(); 
if($user) { 
    //loged 
} else { 
    //not loged 
} 

足够

0

那么这里是一个快速解决方案......也许很脏,但我需要得到它的工作。点击两次是荒谬的。

$user = $facebook->getUser(); 
    if($user) { 
     // do stuff cause user is now logged 
    } 
    if(isset($_GET['fb_logged']) && $user == 0) { 
     // not logged, would have to click twice but let's help that user. 
     header('Location: '.$loginUrl); 
    } 
0

我有同样的问题,我是启动$ Facebook的情况下的两倍,解决了通过使用一个,并添加“offline_access”和它的工作至今,现在通过一次登录点击仅

$facebook = new Facebook(array(/* the data */)); 
+0

'offline_access'权限已被删除不久前,所以请不要再推荐它。 – CBroe