2011-01-19 144 views
1

我整合了圖形API Facebook的連接,但如果我們登錄到Facebook上,我們會自動登錄到與Facebook網站連接爲好。有沒有辦法讓用戶點擊fb「登錄」,只有用戶通過他們的fb帳戶連接到網站?Facebook連接禁用自動登錄

現在用戶自動登錄到該網站沒有選項來選擇他們是否希望用自己的Facebook帳戶。如果他們想從網站註銷,他們需要從Facebook完全註銷,然後才能通過Facebook連接從網站註銷。

任何人都可以幫助我或者給一些提示如何去? 謝謝!

回答

3

我在最近的網站上遇到了同樣的問題,並找到了解決方法。我的解決方案允許用戶在他們的計算機上已經登錄Facebook,但沒有在我的網站上自動登錄,然後他們可以用Facebook登錄按鈕登錄,最後當他們註銷時,他們不會在他們的計算機上將他們登出Facebook ,就在我的網站上(很像Digg與Facebook一樣)。

要做到這一點,我用https://github.com/facebook/php-sdk/是否有與用戶和網站(這將導致自動登錄)活躍的Facebook會話中的PHP檢查。如果有,我也不會附和自動登錄代碼:

FB.init({ 
     appId : '<?php echo $facebook->getAppId(); ?>', 
     session : <?php echo json_encode($session); ?>, // don't refetch the session when PHP already has it 
     status : true, // check login status 
     cookie : true, // enable cookies to allow the server to access the session 
     xfbml : true // parse XFBML 
    });  
    FB.Event.subscribe('auth.login', function() { 
     window.location = "process-login.php"; 
    }); 

而是隻呈現我自己的Facebook登錄按鈕將鏈接到「過程的login.php」。 process-login.php會設置自定義$ _SESSION變量,告訴我的網站有人被記錄(無論是通過我自己的系統還是通過Facebook),然後重新加載引用頁面(使用$ _SERVER ['HTTP_REFERER'] )現在將顯示用戶通過Facebook登錄,因爲我現在設置了自己的$ _SESSION變量。要註銷它們(沒有完全從Facebook註銷它們,只是我的網站),我只會加載一個註銷腳本來刪除$ _SESSION變量。

的使用example.php(在github上的PHP SDK)是在發現我的解決方案非常有幫助的,雖然我不得不顯著定製,以使其與我現有的系統中工作。它至少幫助我瞭解如何訪問PHP中的facebook會話變量(在示例中存儲在$ me中)。

希望這有助於你如果還是有問題的,或者說,它可以幫助別人在這種情況下其他人。

編輯: 原來我很少遇到一些自動登錄的問題。爲了解決這個問題,我刪除了event.subscribe('auth.login')並創建一個名爲以下函數的Facebook按鈕,以便在訂閱auth.login之前檢查登錄狀態。下面是函數:

function check_login_session(){ 
     FB.getLoginStatus(function(r){ 
      if(r.session){ 
       window.location = '/process-login.php'; 
      } 
      else{ 
       FB.Event.subscribe('auth.login', function(response) { 
        window.location = '/process-login.php'; 
       }); 
       FB.login(); 
      } 
     }); 
    }` 
0

你好親愛的我認爲你已經讓你的問題如此困惑。你的問題沒有說明你想要什麼。至於我的理解,我認爲你想通過Facebook連接將用戶連接到你的網站,當用戶點擊Facebook註銷時,它會自動從你的網站註銷。 如果我對您的問題的理解是正確的,那麼只需讓用戶通過Facebook登錄並在您的系統中登錄FB.Event.Subscribe事件即可。 使用下面的代碼登錄按鈕

 
<fb:login-button perms='email' autologoutlink='true'> 

當用戶將讓你對他的Facebook帳戶與您的網站

 
<div id="fb-root"> 
<script> 
    window.fbAsyncInit = function() { 
    FB.init({appId: "Your APP ID", 
      status: true, 
      cookie: true, 
      xfbml: true}); 
    FB.getLoginStatus(function(response) { 
     if (response.session) { 
     // Send here parameters that logins to your system through your website login system 

     } else { 

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

    //Send the Parameters that logouts user from your website through your website logout system; 
     }); 
     }; 
    (function() { 
    var e = document.createElement("script"); 
    e.type = "text/javascript"; 
    e.src = document.location.protocol + 
    "//connect.facebook.net/en_US/all.js"; 
    e.async = true; 
    document.getElementById("fb-root").appendChild(e); 
    }()); 


    

連接,並把上面的整個代碼的< body>標籤之後

+0

和抱歉,如果我沒有達到您的問題:-) – 2011-01-20 12:26:18

0

如果您有:

FB.Event.subscribe('auth.login', function() { 
    fbLogin(this); 
}); 

試評它/ * fb.Event ..... */

1

我有同樣的問題,我想你正在使用facebook提供的腳本。在這種情況下,你有一個與window.fbAsyncInit事件相關的函數。每次頁面加載時都會發生這種情況。 在這個方法結束你的代碼:

FB.getLoginStatus(function(response) { statusChangeCallback(response); });

功能statusChangeCallback驗證用戶的Facebook狀態(連接,授權或未知)。在這裏,如果用戶「連接」,則將他登錄到您的網站。那麼這就是問題所在,你總是試圖用facebook登錄用戶。

這隻能發生在點擊,所以你應該刪除這些線路