我正在尝试对响应 JSON 的 Controller 进行一些 Ajax 调用。
if session[:user]
render :json => "Some Data"
else
render :json => "You are not logged in"
end
第一次由经过身份验证的用户调用此操作时,一切正常,
session[:user]
是 != nil
.第二次调用它是
nil
!因此,我一做
render :json
,似乎 Rails 就失去了它的 session 。 .我发现在第一个调用 rails 中覆盖了 *_session
- 一个新的 cookies 。因此,rails 不知道初始的、经过身份验证的 session 。如果我不将响应呈现为 JSON,一切正常。
如何强制 Rails 在 JSON 呈现的页面中设置与普通 View 相同的 sessionid?
最佳答案
经过六天的搜索,我终于做到了:
似乎 rails 会因为缺少 X-CSRF-Token
而破坏 session 标题。我现在在 ajaxSend
中添加此 header jQuery的钩子(Hook):
$(document).ajaxSend(function(e, xhr, options) {
var sid = $("meta[name='csrf-token']").attr("content");
xhr.setRequestHeader("X-CSRF-Token", sid);
});
它现在按预期工作。
关于ajax - Rails 渲染 JSON - session 丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8511695/