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