我正在对 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/