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),将自己的密钥存储到会话并在重定向后通过密钥检索它。
如果这没有帮助,请提供一些更详细的解释(也许使用一些代码片段)