我在rails 4中使用子域创建了应用程序。它使用Turbolinks。我添加了一个facebook插件。在制作时,当我刷新页面时,一切都很好。但是,当我进入使用子域的链接时,服务器会响应400状态代码。
400错误请求 请求标题或Cookie过大 nginx的/ 1.6.2
如您所见,我使用nginx作为网络服务器。
我尝试调试它并注意到,在我的子域名facebook插件中会生成两个额外的cookie。
当我删除这些cookie时,我可以自由地浏览我的子域,直到我回到根域。之后,当我再次尝试访问我的子域名时,会再次生成这两个cookie,并再次出现整个问题。
有谁知道,为什么要创建这个以及如何防止facebook生成它?
它不会出现在localhost上。我想知道这是否是nginx配置?
我当前的FB集成是使用coffescript提供的。
fb_root = null
fb_events_bound = false
fb_init = ->
loadFacebookSDK()
bindFacebookEvents() unless fb_events_bound
bindFacebookEvents = ->
$(document)
.on('page:fetch', saveFacebookRoot)
.on('page:change', restoreFacebookRoot)
.on('page:load', ->
FB?.XFBML.parse()
)
fb_events_bound = true
saveFacebookRoot = ->
fb_root = $('#fb-root').detach()
restoreFacebookRoot = ->
if $('#fb-root').length > 0
$('#fb-root').replaceWith fb_root
else
$('body').append fb_root
loadFacebookSDK = ->
window.fbAsyncInit = initializeFacebookSDK
$.getScript("//connect.facebook.net/pl_PL/all.js#xfbml=1")
initializeFacebookSDK = ->
FB.init
appId : 'my_app_id'
channelUrl: '//https://facebook.com/my_site
status : true
cookie : true
xfbml : true
@Facebook = { fb_init }
$(document).on "ready page:load pageshow", ->
Facebook.fb_init()
答案 0 :(得分:0)
coffee_script代码中存在问题。
我通过复制https://developers.facebook.com/docs/plugins/like-button
中的代码解决了这个问题到body标签后面的html文件。这确保了重新启动facebook插件,即使实现了turbolink。
以下是代码:
body
#fb-root
javascript:
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/pl_PL/sdk.js#xfbml=1&appId=MY_APP_ID&version=v2.0";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));