2010-07-14 68 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

相關問題