2012-04-05 4 views
3

私はFacebook JavaScript SDKを使用して自分のサイトへのログインを実装しています。私はすでにSafariとFirefoxで動作していますが、Chromeでは動作していません。FB.loginコール後にFacebook JavaScript SDKがクロムに​​アクセストークンクッキーを設定しない

FB.loginメソッドが呼び出された後、私はFacebookからアクセストークンを取得できますが、FirefoxとSafariのようにアクセストークンとユーザーIDをCookieに設定していません。現在のところ、アクセストークンとユーザーIDをクッキーに手動で書き込んでいるため、ログインフローは機能しますが、アクセストークンが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'}); 
    }); 
}); 

答えて

18

ローカルでアプリケーションをテストしている場合は、Google Chromeのはあなたがない限り(localhostを含む)ローカルファイルのためではないサポートクッキーを行いますのでご注意:以下は

は、init、ログインロジックのために私のコードです --enable-file-cookiesフラグで開始してください。ただし、ローカルIPアドレス( 127.0.0.1)をテスト用に使用すると、ChromeはCookieをサポートします。

あなたはここで、この動作についての議論を表示することができます。http://code.google.com/p/chromium/issues/detail?id=535

Why does Chrome ignore local jQuery cookies?から変更回答)JS SDKが既にfbsr_APPIDクッキーで視聴者の最新のIDやaccess_tokenはを保存しないこと

1

注意を。このCookieは、ユーザがFB.ui,FB.login,FB.getLoginStatusforce = true、またはFB.initstatus: trueを使用するたびに、最新のデータで更新されます。

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

関連する問題