【发布时间】:2016-03-14 20:23:38
【问题描述】:
我的 Rails 3.2 应用程序有一个名为 LaunchController 的控制器,它为其他 Web 应用程序提供 api,以便他们可以在我的应用程序中嵌入生成和评分的测验。
当外部应用程序发布到 LaunchController 时,LaunchController#create 使用 OAuth 进行身份验证,缓存知道外部应用程序的对象 @tool,将缓存密钥存储在会话 session[:launch_tool_cache_key] 中并重定向到另一个控制器 AttemptsController#new进行测验。当用户提交他们的答案时,AttemptsControllert#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
【问题讨论】:
-
我的猜测(这实际上只是一个猜测):新的strong_parameters 是通过您的应用程序某处的某些逻辑以某种方式引起的...应该记录被阻止的参数,所以检查@987654332 @为此。
-
你找到解决办法了吗?
-
@DeepanshuGoyal 我没有。我决定将代码保留在 3.2 中,直到应用关闭。
标签: ruby-on-rails ruby session ruby-on-rails-4 ruby-on-rails-3.2