簡體   English   中英

注銷 Facebook(使用 PHP SDK)和 CodeIgniter

[英]Logout of Facebook (using PHP SDK) and CodeIgniter

在我開始實施 Facebook 身份驗證之前,我的注銷 controller 看起來像這樣:

# 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,因為我希望這一切都在 controller 中完成。

謝謝!!

編輯:更清楚一點,問題是 session 沒有被破壞。 我的注銷 controller 將用戶發送到主頁,但主頁將 Facebook 用戶與 session 重定向到登錄頁面。 因此,Facebook 用戶最終進入了登錄頁面。 通常登錄頁面會自動讓他們登錄,但到那時,他們的 session 已被破壞。

您在這里擁有的是:一個“注銷”按鈕,它指向您的注銷 controller 並且您正試圖讓您的注銷 controller 調用一些東西以使用戶從 ZD85544FCE402C7A2A96AF28078ED 注銷。

如果您使用 Facebook 登錄您的用戶,則不需要注銷 controller。 您只需在頁面中顯示注銷 URL :

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

如果您想在用戶注銷時清除 session,請在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();
}

希望有幫助!

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

$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');

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

通過更改最后兩行,我能夠解決此問題:

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

希望它可以幫助某人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM