【问题标题】:Rails 4 session not persisting across requestsRails 4会话不会跨请求持续存在
【发布时间】: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


【解决方案1】:

将对象保存到会话密钥可能会出现问题。看这里

Rails session not persisting after redirects

这个问题看起来和你的很相似。

如果是这样,您最好将@tool 存储到数据库中(例如可能是 Redis),将密钥存储到会话并在重定向后通过密钥检索。

如果这没有帮助,请提供一些更详细的解释(可能带有一些代码)

【讨论】:

  • 感谢您的回复。但是,我决定将代码保留在 3.2 中,因为该应用程序将在不久的将来停用。
  • @vlasits 他确实回答了你的问题。
  • @msbarnard 是的。他确实为我提供了调试问题的好技巧。但是,由于我没有尝试实施他建议的解决方案,因此我没有必要的确认来接受它作为正确答案或赞成或反对。他只需要活出我对他在回答中付出的努力表示感谢的书面表达。
猜你喜欢
  • 2011-10-29
  • 2015-02-15
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 2016-04-12
  • 2019-12-20
  • 2015-06-15
  • 1970-01-01
相关资源
最近更新 更多