2014-09-02 77 views
0

原始路徑我有其中兩個請求(I幀)是通過瀏覽器向一個Rails應用程序(導軌3.2,設計2.2.0)的情況下,無論是在(通過SSO)啓動標誌,然後渲染請求的頁面。問題在於session[:user_return_to]存在競爭條件,並且兩個頁面都呈現相同的頁面,因此其中一個iframe最終會呈現錯誤的頁面。設計標誌時保持在

這是應用程序的流量,現在

  1. authenticate_user!方法被調用,並制定重定向到/users/sign_in
  2. SessionsController#new處理請求並代替渲染它重定向到/sso/new
  3. 請回來在從SSO到/sso/create其符號在用戶(在色器件)和重定向到請求的頁面

在步驟2中,我可以通過URL作爲一個參數去/sso/new和PARAM將步驟中被返回給我3問題是,當我在SessionsController#new就是那個引用已經丟失。我所有的是session[:user_return_to],其中一個iframe已經有錯誤值(會話被共享並出現競爭條件)。

我在想,如果引薦能以某種方式通過監獄長失敗轉嫁。在過濾器之前執行authenticate_user!時,我無法看到是否有掛鉤將其作爲param或標頭通過監管者。在請求期間,我有推薦人,但是當重定向到/users/sign_in時,註冊人不會保留它。

回答

1

我能夠通過使用自定義應用程序的故障爲監獄長來解決這個問題。

我REDIRECT_URL使用request.original_fullpath和它的工作。

這裏是我的失敗類

class CustomDeviseFailure < Devise::FailureApp 
    def redirect_url 
    if sso_enabled? 
     sso_path(return_to: request.original_fullpath) 
    else 
     super 
    end 
    end 

    def sso_enabled? 
    true 
    end 
end