My Rails 3.2应用程序有一个名为LaunchController的控制器,它为其他Web应用程序提供api,以便它们可以嵌入在我的应用程序中生成和评分的测验.
当外部应用程序发布到LaunchController时,LaunchController #create使用OAuth进行身份验证,缓存一个知道外部应用程序的对象@tool,将缓存密钥存储在会话会话[:launch_tool_cache_key]中并重定向到另一个控制器AttemptsController #new渲染一个测验.当用户提交答案时,AttemptsControllert #start会对他们的测验进行评分并使用@tool将评分发布回外部应用程序.
3.2中一切正常.
上周我(终于!)将我的应用程序升级到Rails 4.2.我对迁移的其余部分进行了排序,现在应用程序正在开发中.除了这个过程.
问题在于持久化会话[:launch_tool_cache_key],其中包含用于从缓存中检索序列化@tool的密钥,以便我可以将成绩发送回外部应用程序.我的日志显示缓存键存储在LaunchController中,但在重定向到AttemptsController #new后,会话密钥消失了.
我尝试过的事情:
>评论出protect_from_forgery
>添加skip_before_filter:verify_authenticity_token
最佳答案 将对象保存到会话密钥可能会出现问题.看这里
Rails session not persisting after redirects
此问题与您的问题类似.
如果是这样,似乎你最好将你的@tool存储到数据库中(例如它可能是Redis),将一个密钥存储到会话中并在重定向后通过密钥检索它.
如果这没有帮助,请提供一些更详细的解释(可能包含一些代码)