2014-02-07 38 views
3

在Rails 3.2中使用Devise 2.2.4。設計:當從根路徑重定向到用戶/ sign_in時不顯示「未經身份驗證」的flash消息

未登錄時,我轉到url myapp.com/documents,Devise將我重定向到myapp.com/users/sign_in,並在devise.failure.unauthenticated下顯示在devise.en.yml中配置的Flash消息。

這是可取的!

未登錄時,我轉到url myapp.com(根路徑),Devise類似地重定向並顯示相同的Flash消息。

重定向仍然是可取的,閃光消息不是那麼多。

有沒有一種方法可以將Devise配置爲在從根路徑重定向時不顯示flash'unauthenticated'消息?我知道我可以在一個定製的FailureApp中解決它,但這似乎是一個常見的情況,應該存在一個更簡單的解決方案。

回答

1

你可以用你自己的代碼代替before_filter :authenticate_user!或你自己的代碼,它不會設置消息。

1

I don't think a simpler solution exists。你可以像斯佩蘭斯基達尼爾說的那樣做,或者你可以使用自定義的FailureApp。這並不複雜,但它是脆的,因爲你必須重寫調用,可以在設計的未來版本中改變其他方法的方法:

# app/config/initializers/devise.rb 
class CustomFailure < Devise::FailureApp 
    def redirect 
    store_location! 
    if flash[:timedout] && flash[:alert] 
     flash.keep(:timedout) 
     flash.keep(:alert) 
    elsif attempted_path != root_path 
     flash[:alert] = i18n_message 
    end 
    redirect_to redirect_url 
    end 
end 

Devise.setup do |config| 
    config.warden do |manager| 
    manager.failure_app = CustomFailure 
    end 
end 

所以我會去斯佩蘭斯基DANIL建議。

1

不幸的是,真正的問題原來是特定於應用程序的。根路徑被路由到一個控制器,該控制器破壞Devise的行爲,並在用戶未登錄的情況下根據自定義情況執行自己的重定向。正是這些重定向指示Devise正根據其信息進行陷印和正確處理。

感謝您的意見。我將把斯佩蘭斯基的評論標記爲答案,因爲技術上這就是我們已經在做的事情。

6

重定向後,您可以刪除SessionsController中的Flash消息。

class SessionsController < Devise::SessionsController 

    before_filter :remove_authentication_flash_message_if_root_url_requested 

    private 

    def remove_authentication_flash_message_if_root_url_requested 
    if session[:user_return_to] == root_path and flash[:alert] == I18n.t('devise.failure.unauthenticated') 
     flash[:alert] = nil 
    end 
    end 
end 
相關問題