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