我在我的應用程序上使用設計,並且登錄失敗時我沒有收到錯誤消息。設計不顯示登錄錯誤消息
我在登錄頁面上閃爍[:notice]和flash [:alert]。
我嘗試了很多東西,當我從應用程序控制器中刪除'protect_from_forgery'時,我收到錯誤消息。
另外我在我的應用程序上使用Cancan,它可以是任何問題嗎?有任何想法嗎?
謝謝
我在我的應用程序上使用設計,並且登錄失敗時我沒有收到錯誤消息。設計不顯示登錄錯誤消息
我在登錄頁面上閃爍[:notice]和flash [:alert]。
我嘗試了很多東西,當我從應用程序控制器中刪除'protect_from_forgery'時,我收到錯誤消息。
另外我在我的應用程序上使用Cancan,它可以是任何問題嗎?有任何想法嗎?
謝謝
我猜測真實性驗證失敗。你的表格是否發送了帶有帖子的authenticity_token?如果刪除protect_from_forgery
修復它,這幾乎肯定是問題所在。
確保所有未得到的請求都發送一個authenticity_token
參數,其中的值由rails函數form_authenticity_token
返回。如果您在視圖中使用form_for
,則這應該是自動發生的。檢查你的html以確保表格中的真實性標記應與返回form_authenticity_token
方法的值相匹配。
不可否認,有點不好意思,但我使用這個幫助器(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
好答案@drewbob。我昨天就遇到了這個問題! – thefugal 2011-05-09 19:02:40