2011-05-31 112 views
2

之前,我開始實施的Facebook的身份驗證,我註銷控制器是這樣的:註銷Facebook的(使用PHP SDK)和笨

# Kill the session 
$this->session->sess_destroy(); 

# Redirect back to main page. 
redirect('', 'location'); 

我試圖修改它以註銷用戶的Facebook的爲好,但沒有運氣。

# Kill the session 
$this->session->sess_destroy(); 

require 'application/sdk/facebook.php'; 

// Create our Application instance (replace this with your appId and secret). 
$facebook = new Facebook(array(
    'appId' => '625256', 
    'secret' => '25256256', 
    'cookie' => true, 
)); 

$session = $facebook->getSession(); 

if ($session) { 
    $location = (string) html_entity_decode($facebook->getLogoutUrl(array('next' => 'http://localhost:8888/taketocollege/'))); 
    header("Location: $location"); 
    exit(); 
} 

# Redirect back to main page. 
redirect('', 'location'); 

我在做什麼錯?我不打算爲此使用Javascript SDK,因爲我希望在控制器中完成所有工作。

謝謝!

編輯:爲了更清楚一點,問題是會話沒有被破壞。我的註銷控制器將用戶發送到主頁,但主頁會將Facebook用戶的會話重定向到登錄頁面。所以Facebook用戶最終登錄到登錄頁面。通常,登錄頁面會自動登錄,但到那時,他們的會話就會被銷燬。

+2

你對單詞「祕密」有一個奇怪的定義。你能描述什麼不起作用嗎? – Phil 2011-05-31 05:25:48

+0

您使用的是哪個版本的facebook php sdk? – Pav 2011-05-31 06:59:55

+0

http://stackoverflow.com/questions/4547175/facebook-php-sdk-logout可能包含相關信息 – user516322 2011-05-31 18:06:16

回答

0

我的代碼最初將用戶重定向到主頁。

$session = $facebook->getSession(); 

$me = null; 
// Session based API call. 
if ($session) { 
    try { 
    $uid = $facebook->getUser(); 
    $me = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    } 
} 

if($session && !$this->session->userdata('logged_in')) 
    redirect('login'); 

該代碼將用戶重定向到登錄頁面,因爲會話已更改,未完全刪除。

通過改變最後兩行,我能解決這個問題:

if($me && !$this->session->userdata('logged_in')) 
    redirect('login'); 

希望它可以幫助別人!

+0

如果你解決了自己的問題,請接受你自己的答案;) – Quentin 2011-06-02 10:25:07

0

你在這裏是:一個「註銷」按鈕,指向你的註銷控制器,你正試圖讓你的註銷控制器調用一些東西,使用戶從Facebook註銷。

如果您使用Facebook登錄您的用戶,則不需要註銷控制器。你剛纔在您的網頁上登出網址:

$args['next'] = "http://localhost:8888/taketocollege/"; 
$logoutUrl = $facebook->getLogoutUrl($args); 
echo '<a href="' . $logoutUrl . '">Login with Facebook</a>'; 

如果您想在用戶註銷後清除會話,你婉做的next頁面上(對於你,http://localhost:8888/taketocollege/):

require "facebook.php"; 
$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID, 
    'secret' => YOUR_APP_SECRET, 
)); 

$user = $facebook->getUser(); 

if (!$user) { 
    $this->session->sess_destroy(); 
} 

希望有所幫助!

+0

感謝您的幫助!不幸的是,我不得不使用SDK的v2.2,它在Javascript SDK中播放不好。儘管今天我終於能夠找到修復! – 2011-06-02 02:23:32