2011-05-09 101 views
6

我在我的應用程序上使用設計,並且登錄失敗時我沒有收到錯誤消息。設計不顯示登錄錯誤消息

我在登錄頁面上閃爍[:notice]和flash [:alert]。

我嘗試了很多東西,當我從應用程序控制器中刪除'protect_from_forgery'時,我收到錯誤消息。

另外我在我的應用程序上使用Cancan,它可以是任何問題嗎?有任何想法嗎?

謝謝

回答

2

我猜測真實性驗證失敗。你的表格是否發送了帶有帖子的authenticity_token?如果刪除protect_from_forgery修復它,這幾乎肯定是問題所在。

確保所有未得到的請求都發送一個authenticity_token參數,其中的值由rails函數form_authenticity_token返回。如果您在視圖中使用form_for,則這應該是自動發生的。檢查你的html以確保表格中的真實性標記應與返回form_authenticity_token方法的值相匹配。

+0

好答案@drewbob。我昨天就遇到了這個問題! – thefugal 2011-05-09 19:02:40

1

不可否認,有點不好意思,但我使用這個幫助器(app/helpers/devise_helper.rb)來抓取閃爍並使用這些設置,然後默認爲resource.errors。 Devise的會話控制器似乎沒有使用模型錯誤,而是使用了Flash警報。這只是基於devise lib中的助手。

module DeviseHelper 

    def devise_error_messages! 
    flash_alerts = [] 
    error_key = 'errors.messages.not_saved' 

    if !flash.empty? 
     flash_alerts.push(flash[:error]) if flash[:error] 
     flash_alerts.push(flash[:alert]) if flash[:alert] 
     flash_alerts.push(flash[:notice]) if flash[:notice] 
     error_key = 'devise.failure.invalid' 
    end 

    return "" if resource.errors.empty? && flash_alerts.empty? 
    errors = resource.errors.empty? ? flash_alerts : resource.errors.full_messages 

    messages = errors.map { |msg| content_tag(:li, msg) }.join 
    sentence = I18n.t(error_key, :count => errors.count, 
           :resource => resource.class.model_name.human.downcase) 

    html = <<-HTML 
    <div id="error_explanation"> 
     <h2>#{sentence}</h2> 
     <ul>#{messages}</ul> 
    </div> 
    HTML 

    html.html_safe 
    end 

end