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);