2012-05-30 44 views
0

我試圖給使用設計的應用程序添加一個新的登錄條件。我重定向到sign_in後設計重定向到

如果請求來自不在我白名單上的IP,我想阻止登錄並重定向回到sign_in頁面,並用閃光消息解釋登錄來自外部IP。

重定向的工作原理,但我設置的flash消息並沒有返回到sign_in頁面。我認爲這是因爲Devise神祕地在重定向鏈中添加了另一個重定向(這將會中止Flash消息,因爲Flash消息僅適用於一個請求)。

這是我在做什麼:我檢查請求的IP是否在我的白名單。如果不是,我重定向到/users/sign_in並設置flash通知以顯示用戶無法登錄的原因。

這是我迷路 ...重定向後/users/sign_in發生時,用戶神祕地被轉到/這反過來又重定向到/users/sign_in

上一次重定向回到sign_in頁面是我們爲用戶未登錄而自定義的頁面。但重定向回到根URL會讓我失望。我沒有重寫sessions_controller中的new動作(這是發生這種神祕重定向的地方......),所以這是所有Devise邏輯,據我所知。

有沒有人猜測發生了什麼,有沒有一個設計配置會導致重定向,還是有另一種方式我應該處理這件事?

在我sessions_controller

class SessionsController < Devise::SessionsController 

    def create 

    unless ip_whitelist.include?(request.remote_ip) 
     redirect_to '/users/sign_in', :notice => "Cannot log in from this IP address." 
     return 
    end 

    ... 

    end 
end 
+0

你試過把你的重定向邏輯作爲'before_filter'嗎? – thesis

+0

我剛剛做了,我沒有發現任何區別 – jordanstephens

回答

1

按照制定的wiki,你可以添加一個額外的「驗證」,用戶通過添加active_for_authentication方法給您的用戶模型。否則,devise_for路由方法確實接受:constraints選項,就像常規的Rails路由約束一樣。將您的白名單邏輯打包成一個能夠響應matches?的類,並且您應該很好。