ruby-on-rails - Ajax 调用丢失 session - Ruby on Rails/Radiant CMS 站点

标签 ruby-on-rails ajax rack

我正在对 Radiant CMS/Ruby on Rails 应用程序进行一些相当广泛的更改 - 升级到 Radiant 1.* 以及大量 gem 更改 - 在此过程中,我们开始遇到维护用户的问题 session 。正常调用工作正常,但任何传入的 AJAX 调用都找不到用户的事件 session 并创建一个新 session 。

我们使用的是 cookie-store,所以那里可能出了点问题,但我不确定要看什么或在哪里看。检查请求 header ,看起来 session cookie 正在 AJAX 调用的 cookie header 中传递。对于两种类型的请求,cookie header 中传递的内容看起来是一样的。然而,当在 Controller 中获取 session 变量时,会为 ajax 调用而不是标准 http 调用创建一个新 session 。

知道可能发生了什么,或者我应该去哪里调试正在发生的事情?

最佳答案

问题很可能是安全 token 没有在 Ajax 调用中传递,这导致您的授权 gem 使用户注销。下面是一种在所有 Ajax 调用中透明传递安全 token 的方法:

app/views/layouts/application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <%= csrf_meta_tags %>
    (...)

然后将 jquery-ujs gem 添加到您的 Gemfile 中:

gem 文件

gem "jquery-ujs"

并将此行添加到您的应用程序 javascript 文件的 jquery 行下方:

app/assets/application.js

//= require jquery-ujs

这里是关于 jquery-ujs gem 的更多信息

关于ruby-on-rails - Ajax 调用丢失 session - Ruby on Rails/Radiant CMS 站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12841495/

相关文章:

ruby-on-rails - 如何在 rails 事件记录中创建除 id 以外的唯一列

ruby-on-rails - 使用通配符匹配重定向

ruby-on-rails-4 - 受密码保护的特定 Rails 路线

ruby - 使用 Rack::Test 和 Sinatra 测试 Controller 实例变量

ruby-on-rails - 在 Heroku 的远程存储库之间切换

ruby-on-rails - Rails - 如何访问 html.erb 模板中的外键对象?在控制台中工作

Ajax 身份验证不让浏览器弹出登录对话框

javascript - 开放认证跨域重定向问题

javascript - 如何在页面上实时运行谷歌图表的客户端上显示服务器返回的 JSON?

ruby-on-rails - Rack 错误 -- LoadError : cannot load such file