Rails呈现JSON - 会话丢失?

gor*_*tde 5 cookies ajax session json

我正在尝试对一个响应JSON的控制器进行一些Ajax调用.

if session[:user]
  render :json => "Some Data"
else
  render :json => "You are not logged in"
end
Run Code Online (Sandbox Code Playgroud)

第一次这个动作得到由authed用户都堪称是确定,session[:user]!= nil.它第二次被调用它nil!

所以看起来rails就像我一样失去它的会话render :json.我发现在第一个调用轨道*_session中用新的覆盖了-cookie.因为rails不知道初始的,authed会话.

如果我不将响应呈现为JSON,一切正常.

如何强制rails在JSON渲染页面中设置与普通视图中相同的sessionid?

gor*_*tde 9

经过六天的搜索,我终于做到了:

由于缺少X-CSRF-Token标题,似乎rails会破坏会话.我现在在ajaxSendHook的Hook中添加这个头:

$(document).ajaxSend(function(e, xhr, options) {
  var sid = $("meta[name='csrf-token']").attr("content");
  xhr.setRequestHeader("X-CSRF-Token", sid);
});
Run Code Online (Sandbox Code Playgroud)

它现在按预期工作.