2012-07-25 92 views
0

好吧,因爲標題讀取,我一直在嘗試讓Facebook的OAuth在我的本地主機上工作,我一直在努力解決各種問題,但我只是不知道我的最新問題是什麼,這是頁面加載,如果用戶登錄,它顯示的註銷URL和UID應該像,當我點擊註銷鏈接它會記錄用戶離開Facebook,但重定向或重新加載UID仍然會出現,註銷鏈接也會出現。長話短說,我似乎無法讓我的網站在我的本地主機上運行,​​將我登出Facebook並在我的網站上!任何想法都將是一個巨大的幫助。這裏是我的代碼Facebook OAuth 2.0 PHP註銷鏈接不註銷我的網站,但它在Facebook上做

<?php 

session_start(); 
// store session data 

include "src/facebook.php"; 

$facebook = new Facebook(Array(
    "appId" => "xxx", 
    "secret" => "xxx" 
)); 

$user = $facebook->getUser(); 

echo "UID: " . $user . "<br/>"; 

    // THIS WAS MY FIRST TRY WHICH DIDNT SUCCEED 
// if ($user) { 
// $logoutUrl = $facebook->getLogoutUrl(); 
// echo "<a href='" . $logoutUrl . "'>Logout</a>"; 
// } else { 
// $loginUrl = $facebook->getLoginUrl(); 
// echo "<a href='" . $loginUrl . "'>Login</a>"; 
// } 

// WITH THE ABOVE CODE I GET: 

// An error occurred with PHP-SDK. Please try again later. 
// API Error Code: 191 
// API Error Description: The specified URL is not owned by the application 
// Error Message: Invalid redirect_uri: Given URL is not allowed by the Application configuration. 

    // THIS WAS MY SECOND TRY AFTER SEARCHING FOR INFO, 
    // ALL I DID WAS MANUALLY ADD THE 
    // REDIRECT URI AND ADDED ? , THE REASON IS IF I DIDN'T ADD IT, 
    // IT WOULD GIVE ME AN CSRF ERROR 
    // STATING THAT THE STATE VALUE IS NOT CORRECT, I SEARCHED FOR THE SOLUTION 
    // FOR THAT PROBLEM WITH NO LUCK SO I TRIED THIS 

if ($user) { 
    $logoutUrl = $facebook->getLogoutUrl(); 
    echo "<a href='" . $logoutUrl . "'>Logout</a>"; 
} else { 
    $loginUrl = $facebook->getLoginUrl(Array(
     "redirect_uri" => "http://localhost/php-sdk/index.php?" 
    )); 
    echo "<a href='" . $loginUrl . "'>Login</a>"; 
} 

// WITH THE ABOVE CODE I NOW GET A UID AND THE LOGOUT URL DOES APPEAR, BUT ONCE I CLICK IT 
// THE USER IS LOGGED OUT LIKE HE SHOULD BUT THEN ON REDIRECT OR RELOAD THE UID STILL 
// APPEARS AND SO DOES THE LOGOUT LINK, EVEN THOUGH THE USER IS NOT LOGGED IN!! 

?> 

回答

2

這是因爲Facebook的SDK商店的的user id在你的PHP會話,並註銷過程,發生在Facebook的服務器上不能清楚地表明你。你可以看到通過檢查var_dump($_SESSION);

輸出,以檢測是否存儲在您的會話中你仍然記錄的UID可以嘗試使用SDK對象來從圖形API的東西,像($facebook->api('/me'))和catch哪些內容保存在會議異常,並在會話發生時清除會話。其他

一種解決方案可能是一個next添加到getLogoutUrl()調用(就像在getLoginUrl())和當Facebook向用戶返回到該網址,您清除會話變量。 BaseFacebook類的缺省Facebook實現有destroySession(由於某些原因未在官方SDK文檔中列出)。

+0

感謝您的回覆,我有點想通了昨天,我要實現你的第二個解決方案,關於在註銷中添加redirect_uri並銷燬會話變量。這有點不爽,再次感謝您的回覆! – user1549913 2012-07-26 20:16:31