2012-07-18 75 views
0

我試圖在我們的web應用程序中實現Facebook身份驗證,服務器端處理Facebook cookie。我們使用JavaScript SDK來執行我們的登錄並設置cookie。Facebook的JS SDK沒有設置Cookie

然而,不管怎樣,Facebook SDK似乎並沒有設置我們的fbsr_APPID cookie(或任何cookie)。這是CoffeeScript的代碼:

window.fbCallbacks = [] 

    # Create initialization function 
window.fbAsyncInit = -> 
    fbConfig = 
    appId:  '<APPID here>' 
    channelUrl: '/assets/channel.html' 
    status:  true 
    cookie:  true 
    xfbml:  true 

    FB.init fbConfig 

    cb() for cb in window.fbCallbacks 

# Set it up 
((d)-> 
    id = 'facebook-jssdk' 
    ref = d.getElementsByTagName('script')[0] 
    return if d.getElementById id 

    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) 

我們讓Facebook的通過所提供的登錄控件執行登錄:

<div class="fb-login-button" data-show-faces="true" data-scope="publish_stream"/> 

一些額外的信息:

  • 這是在Chrome穩定和金絲雀測試以及IE9,在本地主機和127.0.0.1上,有和沒有--enable-file-cookies集(爲了什麼值得)。我想說這意味着它不是瀏覽器問題。
  • 我試過擺弄通道文件,但它現在似乎完全可以訪問。
  • 從JS自己的代碼中設置一個cookie就像它應該那樣工作。
  • JS SDK加載正常,因爲我的登錄小部件已正確裝飾,甚至顯示我已經登錄後,我做了。
  • 在控制檯中沒有報告錯誤。它完全空白。
  • 用初始化代碼中的副本替換CoffeeScript Facebook Developers上的JavaScript示例也不能使其工作。

那麼發生了什麼事?爲什麼Facebook沒有設置我的應用程序cookie?

爲了參考,此處是由上述的CoffeeScript產生的JavaScript的:

(function() { 
    window.fbCallbacks = []; 
    window.fbAsyncInit = function() { 
    var cb, fbConfig, _i, _len, _ref, _results; 
    fbConfig = { 
     appId: '<appid>', 
     channelUrl: '/assets/channel.html', 
     status: true, 
     cookie: true, 
     xfbml: true 
    }; 
    FB.init(fbConfig); 
    _ref = window.fbCallbacks; 
    _results = []; 
    for (_i = 0, _len = _ref.length; _i < _len; _i++) { 
     cb = _ref[_i]; 
     _results.push(cb()); 
    } 
    return _results; 
    }; 
    (function(d) { 
    var id, js, ref; 
    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"; 
    return ref.parentNode.insertBefore(js, ref); 
    })(document); 
}).call(this); 

回答

0

看來我誤解了SDK。登錄按鈕小部件實際上並未在本地設置cookie;它通過Facebook和JavaScript完全管理身份驗證和訪問,因此不允許您訪問服務器上的身份驗證令牌。

使用JS SDK的FB.login()函數確實設置了cookie。