Rails 4 会话不会跨请求持久化



My Rails 3.2应用程序有一个名为LaunchController的控制器,它为其他Web应用程序提供了一个API,以便它们可以嵌入在我的应用程序中生成和评分的测验。

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

在 3.2 中一切正常。

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

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

我尝试过的事情:

  • 注释掉protect_from_forgery
  • 添加skip_before_filter :verify_authenticity_token

将对象保存到会话密钥可能存在一些问题。看这里

重定向后 Rails 会话不持久

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

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

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

最新更新