9

登錄我已經試過了PHP SDK(v.3.1.1),以及當前的Javascript SDK 如下建議:試着在現在https://developers.facebook.com/docs/guides/web/如何退出從Facebook應用程序的用戶,但保持從Facebook

註銷我曾經嘗試都FB.logout()(對於JS) 和$ facebook-> getLogoutUrl();

爲雙方明確規定的文件,這些方法 註銷用戶的應用程序,以及他們的Facebook會話。

但我只需要註銷用戶的Facebook應用程序(測試地點)的。

我試圖註銷用戶在我的測試網站,忽略了Facebook的 方面。但在這種情況下,當用戶再次點擊登錄按鈕, 的登錄流程(Facebook的身份驗證和重定向)不會發生。

我也試過:(由之前的懸而未決的問題的建議)

$facebook->destroySession(); 

unset($_SESSION['fb_' . sfConfig::get('app_fb_config_id') . '_code']); 
unset($_SESSION['fb_' . sfConfig::get('app_fb_config_id') . '_access_token']); 
unset($_SESSION['fb_' . sfConfig::get('app_fb_config_id') . '_user_id']);  

然而,重定向到登錄頁面時,$ facebook->的getUser()仍然 檢索用戶。

注: 按文檔例子中,我使用PHP SDK用戶登錄到我的測試現場, 和JS SDK,渲染和推動Facebook的登錄按鈕。

補充:

我使用的認證基本上是什麼文檔建議:

<?php 

define('YOUR_APP_ID', 'YOUR APP ID'); 

//uses the PHP SDK. Download from https://github.com/facebook/php-sdk 
require 'facebook.php'; 

$facebook = new Facebook(array(
    'appId' => YOUR_APP_ID, 
    'secret' => 'YOUR APP SECRET', 
)); 

$userId = $facebook->getUser(); 

?> 

<html> 
    <body> 
    <?php if ($userId) { 
     $userInfo = $facebook->api('/' + $userId); ?> 
     Welcome <?= $userInfo['name'] ?> 
    <?php } else { ?> 
    <div id="fb-root"></div> 
    <fb:login-button></fb:login-button> 
    <?php } ?> 
    <script> 
     window.fbAsyncInit = function() { 
     FB.init({ 
      appId  : '<?= YOUR_APP_ID ?>', 
      status  : true, 
      cookie  : true, 
      xfbml  : true, 
      oauth  : true, 
     }); 

     FB.Event.subscribe('auth.login', function(response) { 
      window.location.reload(); 
     }); 
     }; 

     (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)); 
    </script> 
    </body> 
</html> 
+0

如果用戶通過了應用程序的認證並且登錄到Facebook,getUser()將始終返回FBID。刪除cookie的作品,但sdk得到一個新的access_token wenn調用'getUser'問題是爲什麼你想這樣做?您(應用程序)和Facebook用戶都無法從中獲得任何收益。 – Rufinus 2012-03-20 08:59:50

+0

如何簡單地刪除該用戶的會話cookie?如果你只刪除你的cookie,那麼用戶仍然會保持登錄到Facebook,而不是你的應用程序。下次用戶點擊登錄按鈕時,您爲他創建一個新的會話。 – 2012-03-20 09:09:17

+0

@NitzanTomer我試圖刪除測試網站的會話,但正如我所說的,在這種情況下,js sdk的登錄按鈕不再按預期工作。 – Alias 2012-03-20 09:18:15

回答

5

以你的代碼,並修改只是有點:

<?php 
    define('YOUR_APP_ID', 'YOUR APP ID'); 

    //uses the PHP SDK. Download from https://github.com/facebook/php-sdk 
    require 'facebook.php'; 

    $facebook = new Facebook(array(
     'appId' => YOUR_APP_ID, 
     'secret' => 'YOUR APP SECRET', 
    )); 

    session_start(); 

    $userId = $facebook->getUser(); 
    if ($userId && !isset($_SESSION['fbdata'])) { 
     $_SESSION['fbdata'] = array("userid" => $userId); 
    } 
?> 

<html> 
    <body> 
    <?php if ($userId) { 
     $userInfo = $facebook->api('/' + $userId); ?> 
     Welcome <?= $userInfo['name'] ?> 
    <?php } else { ?> 
     <div id="fb-root"></div> 
     <fb:login-button></fb:login-button> 
    <?php } ?> 
     <script type="text/javascript"> 
      window.fbAsyncInit = function() { 
       FB.init({ 
        appId  : '<?= YOUR_APP_ID ?>', 
        status  : true, 
        cookie  : true, 
        xfbml  : true, 
        oauth  : true, 
       }); 

       FB.Event.subscribe('auth.login', function(response) { 
        window.location.reload(); 
       }); 
      }; 

      (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)); 
     </script> 
    </body> 
</html> 

我剛纔添加的節約將用戶數據導入會話。 現在,如果你使用這種方法,當用戶進入你的頁面時,你應該檢查他是否已經有一個會話,如果是的話,所有的都是好的,不需要對他進行身份驗證。

當你想註銷用戶您的應用程序,但不出來的facebook,只是銷燬會話:

session_start(); 
session_destroy(); 

這應該刪除您對用戶的所有保存的數據,下一次他訪問你的頁面,你可以開始與他一起新鮮。

我不是一個php程序員,我在這裏使用的所有php都來自我的(非常)有限的知識以及我發現的。

+0

是的,我試過這種方法。但正如我在上次對您的回覆中所述,我剛纔已經意識到爲什麼facebook sdk會將用戶完全登錄到網站和Facebook之外。例如,用戶彈出一個瀏覽器並轉到該站點,使用fb登錄,他登錄到該站點,並在同樣的行動中,他也登錄到Facebook。如果我只是爲了破壞網站的會話,用戶仍然登錄到Facebook,因爲以前的行動,但他/她可能不希望這樣。 – Alias 2012-03-20 10:04:36

+0

我想要的是:1.)用戶(未登錄到FB或站點)通過fb登錄登錄到站點,註銷和fb會話也被破壞。 2.)用戶(登錄到fb,而不是站點),通過fb登錄登錄到站點,註銷站點,但fb會話保持不變。 – Alias 2012-03-20 10:07:02

+0

當然。 Facebook爲您提供了將用戶登出其平臺的方式,但是如果採取這種方法,或者僅從您的網站登錄用戶,則取決於您和您的應用程序。你問了如何從一個應用程序登錄一個用戶,而不是從Facebook登錄,這正是我試圖幫助你的。如果您不想做出選擇,您可以使用兩種不同類型的按鈕:「註銷站點&fb」和「註銷站點」並讓用戶決定。 – 2012-03-20 10:07:52

相關問題