设计没有验证错误

时间:2014-05-09 19:51:54

标签: ruby-on-rails authentication ruby-on-rails-4 devise

我使用Devise进行登录。除了一个例外,一切正常。如果用户在登录页面上输入错误或没有值,则没有任何问题。没有错误或错误消息(使用正确的数据登录正常工作)。

我只在/ session / new页面上遇到此问题。

这是我的观点

.container


.row.text_content_top
    .alert.alert-danger
      %button.close{ type: "button", "data-dismiss" => "alert"} ×
      = devise_error_messages!
  .row.text_content_top
    .col-md-4.col-md-offset-4
      %h2 Sign in
  .row.text_content
    .col-md-4.col-md-offset-4.well
      = form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
        = devise_error_messages!
        .input-group.has-feedback
          %span.input-group-addon
            %i.fa.fa-envelope-o.fa-fw
          = f.label :email, class: 'sr-only'
          = f.email_field :email, autofocus: true, class: 'form-control', placeholder: 'E-Mail'
        .input-group.has-feedback.top-buffer-10
          %span.input-group-addon
            %i.fa.fa-key.fa-fw
          = f.label :password, class: 'sr-only'
          = f.password_field :password, autocomplete: 'off', class: 'form-control', placeholder: 'Password'
        = f.submit "Login", class: 'btn btn-success btn-large top-buffer-10'
      = link_to "Forgot your password?", new_password_path(resource_name), class: 'top-buffer-10'

我的模特

class User < ActiveRecord::Base
  has_many :orders

  validates :email, presence: true, uniqueness: true

  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :lockable

end

我在控制器或其他自定义代码中没有代码

提前谢谢

1 个答案:

答案 0 :(得分:1)

根据@JKen13579的回答,您需要注意Devise不会以传统方式存储用于登录的错误消息(使用errors object)。相反,Devise使用flash,这是让一些人失望的原因。


使用integrate Devise error messages教程

,可以this进入您的应用
  

对于设计,你需要覆盖设计处理flash消息的方式。   在“app / helpers / devise_helper.rb”中创建一个名为devise_helper的文件。

     

在文件内部,您必须创建一个名为的方法   devise_error_messages !,这是告诉的文件的名称   设计如何处理flash消息。

module DeviseHelper
  def devise_error_messages!
    return '' if resource.errors.empty?

    messages = resource.errors.full_messages.map { |msg| content_tag(:li, msg) }.join
    html = <<-HTML
    <div class="alert alert-error alert-block"> <button type="button"
    class="close" data-dismiss="alert">x</button>
      #{messages}
    </div>
    HTML

    html.html_safe
  end
end

<%= devise_error_messages! %>