2010-07-14 179 views
17

我现在用的是PHP API如何检查是否用户登录与新的Facebook 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 

现在你可以看到,远期工作的每一个页面的登录网址的这种方式虽然它工作,但它也很慢,并附加& session = {bla}字符串到单个网址。

我需要一种方法来检查用户已登录的位置,然后我将他重定向到登录页面。但我无法在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/>" ; 
} 

回答

19

如果我正确地读你的代码,只有当没有会话返回你做重定向?根据Facebook's example中的意见,即使你得到一个会议,你也不能认为它仍然有效。只有尝试一个需要登录用户的API调用才能确定。这是我见过的可靠确定登录/注销状态的最佳方式。

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

如果已经存储访问令牌,并使用它,这是行不通的,因为API调用仍然有效,没有抛出异常,但是当你将其重定向到getLogoutUrl例如,它只是将他们到Facebook的主页,而不是把你送回你的网站 – andrewtweber 2013-03-04 23:00:25

+0

@andrewtweber。谢谢。 – 2013-11-25 12:09:21

+0

你必须解码的网址之前,这就是为什么你不重定向: <?php echo rawurlencode($ logoutUrl); ?> – 2014-02-12 17:03:36