设计不显示登录错误消息

时间:2011-05-09 18:46:16

标签: ruby-on-rails devise

我在我的应用程序上使用设计,并且在登录失败时我没有收到错误消息。

我在登录页面上闪过[:notice]和flash [:alert]。

我尝试了很多东西,当我从应用程序控制器中删除'protect_from_forgery'时,我收到错误消息。

我也在我的应用程序中使用Cancan,它可以是它的任何问题吗?有什么想法吗?

由于

2 个答案:

答案 0 :(得分:2)

我猜测真实性验证失败了。您的表单是否发送了包含帖子的authenticity_token?如果删除protect_from_forgery修复它,这几乎肯定是问题所在。

确保所有非get请求都使用rails函数authenticity_token返回的值发送form_authenticity_token参数。如果您在视图中使用form_for,则应自动执行此操作。检查你的html是否确定,表单中的真实性标记应该与form_authenticity_token方法返回的值匹配。

答案 1 :(得分:1)

不可否认,有点hacky,但我正在使用这个助手(app / helpers / devise_helper.rb)来获取闪存并使用那些设置然后默认为resource.errors。 Devise的会话控制器似乎没有使用模型错误,而是使用闪存警报。这只是基于设计库中的帮助程序。

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