自分のFacebook連携アプリからログアウトするだけでなく、Facebookからもログアウトする方法です。
複数のFacebookアカウントを切り替えてテストしたりする場合に必要なんですが、なかなか正しいやり方を書いているものがなくて苦労しました。
$facebook->destroySession()を使うわけですが、Facebookログアウト後に呼び出すところがポイントです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
function logout() { if (!isset($this->facebook)){ $this->set_facebook(); } // Faceebookのログアウト $params = array( 'next' => Router::url('/users/fb_logout', true), 'access_token' => $this->facebook->getAccessToken(), ); $logout_url = $this->facebook->getLogoutUrl($params); $this->redirect($logout_url); } public function fb_logout(){ if (!isset($this->facebook)){ $this->set_facebook(); } $this->facebook->destroySession(); // セッション変数を全て解除する $_SESSION = array(); // セッションを切断するにはセッションクッキーも削除する。 // Note: セッション情報だけでなくセッションを破壊する。 if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // 最終的に、セッションを破壊する session_destroy(); } public function set_facebook(){ $this->facebook = new Facebook(array( 'appId' => Configure::read('facebook_appId'), 'secret' => Configure::read('facebook_secret'), )); } |
calePHPのサンプルコードですが、cakePHPでなくてもほとんど同じです。
getLogoutUrl()のnextパラメータにFacebookのセッションを破棄するページのURLを入れています。
参考:http://stackoverflow.com/questions/8405729/facebook-php-sdk-caching-user