2012-02-08 143 views
6

如何使用Facebook的api註銷登出我的應用程序(網站),但讓我登錄到facebook.com?Facebook API註銷我的應用程序,但不是Facebook

這將記錄我好嗎:

window.fbAsyncInit = function() 
{ 
     FB.init({ 
      appId  : '<?= APP_ID ?>', 
      status  : true, 
      cookie  : true, 
      xfbml  : true, 
      oauth  : true, 
     }); 

    FB.Event.subscribe('auth.login', function(response) 
    {alert(response); 
      window.location = 'http://reviewsie.com/accounts/facebook'; 
     }); 

    }; 

    (function(d) 
{ 
     var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 
     js = d.createElement('script'); js.id = id; js.async = true; 
     js.src = "//connect.facebook.net/en_US/all.js"; 
     d.getElementsByTagName('head')[0].appendChild(js); 
    }(document)); 

但後來我點擊我的網站,我我殺會話我的應用程序註銷。然後,當你再次點擊fb:login-button時,它會打開並關閉,因爲我仍然連接到Facebook,所以不會執行任何操作。我希望它重定向。

但是,如果當我註銷時我也使用Facebook :: logoutUrl它會將我從我的應用程序和Facebook中註銷,這不是我想要的。

+0

請粘貼你的代碼。你試過了什麼? – 2012-02-08 07:43:53

+0

張貼我的代碼,而且我被困在這個 – cdub 2012-02-08 07:48:51

+0

unset($ _ SESSION ['fb_APPID_user_id']); – 2013-11-25 10:22:38

回答

3

如果您使用fb登錄,您確定只想註銷您的應用程序,而不是fb?什麼樣的應用程序可以想要做這樣的事情?爲什麼?這樣做的好處是什麼?


但是,如果你真的想(黑客),在index.php中:

<?php 
require 'init.php'; // general init 
require 'init_fb.php'; // sets $fb_id if logged in to fb 

if (isset($fb_id) and !isset($_SESSION['do_not_auto_login'])) { 
    echo "<a href='/logout'>Logout</button>"; 
    include 'app.php'; 
    return; 
} 

if (isset($_SESSION['do_not_auto_login']) 
    echo "<a href='/re_login'>FB Login</button>"; 
else include 'html_and_js_fb_login_code_and_button.php'; 

include 'startpage.php'; 
?> 

和logout.php:

$_SESSION['do_not_auto_login'] = true; 
// destroy-code 

和re_login.php:

unset($_SESSION['do_not_auto_login']); 
header("location: /"); // re-direct back to index.php 

不完美,但有點不錯。希望你得到黑客!


但是,爲什麼?如果你不認爲你的用戶想回來,問「如何從用戶刪除我的fb應用程序?」或者改爲或嘗試@ DMCS的答案。爲什麼?

1

您需要使用destroySession爲Facebook做

www.example.com?act=logout

<?php 
php sdk blah blah 


if($_GET['act'] =='logout'){ 
    $facebook->destroySession(); 

} 
$params = array(
'scope' => 'read_stream, friends_likes', 
'redirect_uri' => 'https://www.myapp.com/post_login_page' 
); 

$loginUrl = $facebook->getLoginUrl($params); 

?> 

也許你需要設置參數去使它重定向。

+0

仍然沒有工作:o( – cdub 2012-02-08 08:02:42

+0

當你從你的網站註銷時,你就會登錄Facebook。 當你點擊登錄時,你將它重定向到一個特定的頁面?是這個你想要嗎? – Leon 2012-02-09 01:44:00

+0

如果你想要從你的網站登出。只需使用$ facebook-> destroySession(); ,請勿使用getLogoutURL。 – Leon 2012-02-09 01:45:29

0

當用戶登錄到您的應用程序時,使用其當前訪問令牌向/me/permissions發送HTTP DELETE調用。這會將它們從您的應用程序中註銷,要求它們重新進行身份驗證,以確定是否需要再玩一些。也請務必使用正常的php會話清除代碼銷燬php會話。

+0

我不認爲他想刪除權限!只是一個正常的註銷! @DMCS – 2012-12-29 20:08:54

+0

「我如何使用Facebook的api登出我的應用程序(一個網站),但讓我登錄到facebook.com?」這是他們的問題,對吧?強制使用reauth的唯一方法是刪除當前的認證令牌(至少這是2012年2月的方式..也許Facebook已經改變了一些東西)。請啓發我們如何回答他們的問題。 – DMCS 2012-12-31 19:58:36

+0

@LeonardPauli非常好的解決方案,我很驚訝這個問題似乎與很多人的網站非常相關,但卻引起了這麼少的關注。我不會在PHP(C#)中做任何事情,所以學習新東西總是很有趣。 – DMCS 2013-03-02 16:03:16

6

這個工作對我來說:

window.fbAsyncInit = function() { 

FB.getLoginStatus(function(response) { 

    FB.api("/me/permissions", "delete", function(response){ 


    }); 

}); 

} 
6

有點晚了,但可能幫助別人。您可以撤銷應用程序權限,將其有效地從應用程序中註銷。代碼如下:

FB.api('/me/permissions', 'delete', function(response) { 
    console.log(response.status); // true for successful logout. 
});