4

我的Rails 3.2的应用程序有一个名为LaunchController控制器,用于其他Web应用程序提供了一个API,使他们能够嵌入生成并在我的应用取得了测验。轨道4届没有坚持跨请求

当外部应用程序发送到LaunchController,LaunchController#create进行认证使用OAuth,缓存的对象@tool知道该外部应用程序,存储在会话session[:launch_tool_cache_key]一个缓存键和重定向到另一个控制器AttemptsController#new呈现一个测验。当用户提交答案时,AttemptsControllert#会为他们的测验创建成绩,并使用@tool将成绩发回给外部应用程序。

一切都在3.2工作正常。

上周我(终于!)升级我的应用程序到Rails 4.2。我对剩余的迁移进行了排序,现在应用程序正在开发中。除了这个过程。

问题在于坚持包含我用来从缓存中检索序列化的@tool的密钥的session[:launch_tool_cache_key],因此我可以将等级发送回外部应用程序。我的日志显示缓存键被存储在LaunchController,但重定向后AttemptsController#new会话密钥不见了。

事情我已经尝试:

  • 注释掉protect_from_forgery
  • 加入skip_before_filter :verify_authenticity_token
+1

我的猜测(这是真的只是一个猜测):新[strong_parameters(HTTPS:/ /github.com/rails/strong_parameters)在应用程序中的某个地方......阻止参数应记录在某种程度上造成这种由一些逻辑,因此检查'登录/ development.log'这一点。 – Carpetsmoker

回答

0

这可能是有些问题,节省对象的会话密钥。看看这里

Rails session not persisting after redirects

这个问题看起来与你相似。

如果是这样,看起来好像你最好将你的@tool存储到数据库中(例如它可能是Redis),将会话密钥存储到会话中并在重定向后通过密钥进行检索。

如果这没有帮助,请提供一些更详细的解释(也许有一些代码段)

+0

感谢您的回复。但是,由于应用程序在不久的将来会停止运行,因此我决定将代码保留在3.2中。 – vlasits