4

Facebook JavaScript SDKを使用して、自分のサイトのログインを実装しています。私はすでにSafariとFirefoxで動作していますが、Chromeでは動作していません。

FB.loginメソッドが呼び出された後、Facebookからアクセストークンを取得できますが、FirefoxやSafariのようにCookieにアクセストークンとユーザーIDが設定されていません。現在、ログインフローが機能するようにアクセストークンとユーザーIDを手動でCookieに書き込んでいますが、それでもアクセストークンがChromeだけで書き込まれていないというバグがあります。

誰かが以前にこれに遭遇し、手元の修正を知っていますか?とても有難い。

以下は、initおよびloginロジックのコードです。

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'});
  });
});
4

2 に答える 2

19

アプリケーションをローカルでテストしている場合、フラグで開始しない限り、Google Chromeはローカルファイル(を含む)のCookieをサポートしていないことに注意してください。ただし、テストにローカルIPアドレス(<code> 127.0.0.1)を使用する場合、ChromeはCookieをサポートします。localhost--enable-file-cookies

この動作に関するディスカッションは、http ://code.google.com/p/chromium/issues/detail?id=535で確認できます。

( ChromeがローカルのjQuery Cookieを無視する理由から変更された回答)

于 2012-04-10T01:26:57.330 に答える
1

JS SDKは、ビューアの最新のIDとaccess_tokenをfbsr_APPIDCookieにすでに保存していることに注意してください。FB.uiそのCookieは、ユーザーがFB.login、、、、またはを使用するたびに最新のデータで更新されます。FB.getLoginStatusforce = trueFB.initstatus: true

独自のCookieを保存する代わりに、このメソッドを使用することを強くお勧めします。これは、signed_requestパラメーターと同じようにアプリの秘密鍵で署名されているためです。そこにある指示に従ってデコードし、署名を確認し、有効な場合はそれを使用する必要があります。これにより、偽造を防ぐことができます(ただし、短期間のリプレイ攻撃を防ぐことはできません)。

于 2012-04-13T23:12:44.820 に答える