簡體   English   中英

Facebook JavaScript SDK 在 FB.login 調用后未在 chrome 中設置訪問令牌 cookie

[英]Facebook JavaScript SDK does not set access token cookie in chrome after FB.login call

我正在使用 Facebook JavaScript SDK 為我的網站實現登錄。 我已經讓它在 Safari 和 Firefox 上運行,但在 Chrome 中不行。

調用 FB.login 方法后,我能夠從 Facebook 檢索訪問令牌,但它沒有像在 Firefox 和 Safari 中那樣在 cookies 中設置訪問令牌和用戶 ID。目前,我正在手動編寫訪問令牌和用戶 ID 到 cookies 所以登錄流程有效,但它仍然讓我感到煩惱,因為訪問令牌不是單獨在 Chrome 中編寫的。

有沒有人以前遇到過這個並且知道手頭的修復方法? 非常感激。

以下是我的初始化和登錄邏輯代碼:

window.fbAsyncInit = function() {
  FB.init({
    appId      : "#{AppConfig.facebook['app_id']}", // App ID
    status     : true, // check login status
    cookie     : true, // enable cookies to allow the server to access the session
    xfbml      : true  // parse XFBML
  });

  // Additional initialization code here
};

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

$(function() {
  $(".fb-login-button").click(function() {
    FB.login(function(response) {
      if (response.authResponse) {
        console.log("Welcome! Fetching your information...");
        $.cookie("user_id", response.authResponse.userID);
        $.cookie("access_token", response.authResponse.accessToken);
        window.location = "#{oauth_facebook_callback_url}";
      } else {
        console.log("User cancelled login or did not fully authorize.");
      }
    }, {scope: 'publish_stream,offline_access,email,user_events,create_event,user_location'});
  });
});

如果您在本地測試您的應用程序,請注意 Google Chrome 瀏覽器不支持本地文件(包括localhost )的 cookies ,除非您使用--enable-file-cookies標志啟動它。 但是,如果您使用本地 IP 地址( 127.0.0.1 )進行測試,Chrome 確實支持 cookies。

您可以在此處查看有關此行為的討論: http://code.google.com/p/chromium/issues/detail?id=535

(答案修改自Why does Chrome ignore local jQuery cookies?

請注意,JS SDK 已經將查看者的最新 ID 和 access_token 存儲在fbsr_APPID cookie 中。 每當用戶使用FB.uiFB.loginFB.getLoginStatus with force = trueFB.init with status: true時,該 cookie 將更新為最新數據。

我強烈建議使用此方法而不是存儲您自己的 cookies,因為它與signed_request參數一樣使用您應用程序的密鑰進行簽名。 您應該按照那里的說明對其進行解碼,驗證簽名,如果有效,請使用它。 這將防止偽造(但仍然可能無法防止短期重放攻擊)。

暫無
暫無

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

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