Rails 4会话在请求之间不持久

vla*_*its 5 ruby session ruby-on-rails ruby-on-rails-3.2 ruby-on-rails-4

我的Rails 3.2应用程序有一个称为LaunchController的控制器,该控制器为其他Web应用程序提供了一个api,因此它们可以将生成和评分的测验嵌入到我的应用程序中。

当外部应用程序发布到LaunchController时,LaunchController#create使用OAuth进行身份验证,缓存一个@tool了解外部应用程序的对象,在会话中存储一个缓存密钥,session[:launch_tool_cache_key] 然后重定向到另一个AttemptsController#new呈现测验的控制器。当用户提交答案时,AttemptsControllert#create会对测验进行评分,并使用@tool将评分发布回外部应用程序。

在3.2中一切正常。

上周,我(终于!)将我的应用程序升级到Rails 4.2。我对其余的迁移进行了排序,该应用程序现在可以在开发中使用了。除了这个过程。

问题在于保留session[:launch_tool_cache_key]包含用于@tool从缓存中检索序列化的密钥的,因此我可以将等级发送回外部应用程序。我的日志显示,缓存密钥已存储在中LaunchController,但是重定向到AttemptsController#new会话密钥后就消失了。

我尝试过的事情:

  • 注释掉 protect_from_forgery
  • skip_before_filter :verify_authenticity_token

Ser*_*ell 1

将对象保存到会话密钥可能会出现问题。看这里

Rails 会话在重定向后不会持续存在

这个问题看起来和你的很相似。

如果是这样,似乎您最好将其存储@tool到数据库中(例如,可以是 Redis),将密钥存储到会话中,并在重定向后通过密钥检索它。

如果这没有帮助,请提供一些更详细的解释(也许包含一些代码)