我的 Rails 3.2 应用程序有一个名为 LaunchController 的 Controller ,它为其他 Web 应用程序提供 API,以便它们可以在我的应用程序中嵌入生成和评分的测验。
当外部应用程序发布到 LaunchController 时,LaunchController#create
使用 OAuth 进行身份验证,缓存一个知道外部应用程序的对象 @tool
,将缓存键存储在 session session[:launch_tool_cache_key]
并重定向到呈现测验的另一个 Controller AttemptsController#new
。当用户提交他们的答案时,AttemptsControllert#create 会为他们的测验打分并使用@tool 将成绩发回外部应用程序。
在 3.2 中一切正常。
上周我(终于!)将我的应用程序升级到 Rails 4.2。我对其余的迁移进行了排序,应用程序现在正在开发中。除了这个过程。
问题在于保留 session[:launch_tool_cache_key]
,它包含我用来从缓存中检索序列化 @tool
的 key ,这样我就可以发送成绩了返回到外部应用程序。我的日志显示缓存 key 存储在 LaunchController
中,但在重定向到 AttemptsController#new
后 session key 消失了。
我尝试过的事情:
- 注释掉
protect_from_forgery
- 添加
skip_before_filter :verify_authenticity_token
最佳答案
将对象保存到 session key 可能会出现一些问题。看这里
Rails session not persisting after redirects
这个问题看起来和你的很相似。
如果是这样,您最好将您的@tool
存储到数据库中(例如,它可以是 Redis),将一个 key 存储到 session 中,并在重定向后通过 key 检索它。
如果这没有帮助,请提供一些更详细的解释(可能有一些代码)
关于ruby-on-rails - Rails 4 session 不会跨请求持续存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35997340/