如何使用确认密码验证密码[Rails 3.2]

时间:2013-01-30 00:20:35

标签: ruby-on-rails-3

如何在rails 3.2中使用确认密码验证密码

我的代码不起作用

您可以告诉我的错误

我尝试了很多改变控制器中代码的变体。

密码保存但未验证密码确认字段和密码字段。

请帮帮我,帮帮我)))

视图

<%= form_for :password, :url => { :action => "change_password" }, :id => @user do |f| %> 
<% if @user.errors.any? %>
    <div class="error_messages">
      <h2>Form is invalid</h2>
      <ul>
        <% for message in @user.errors.full_messages %>
          <li><%= message %></li>
        <% end %>
      </ul>
    </div>
  <% end %>
<%= f.password_field :password %>
<%= f.password_field :password_confirmation %>
<%= f.submit "Save", :class => "button blue" %>
<% end %> 

用户控制器

  def change_password
    @page_title = "Changing Zetfon account password"
    @user = current_user
    if request.post?

       @user.password = Digest::SHA1.hexdigest(params[:password][:password]) 
    if @user.save
        redirect_to :action => 'profile'
        flash[:status] = "Your password was changed. Next time you sign in use your new password."
      else
     flash[:status] = _('Your password not changed')
        render :action => "change_password"
      end
    end
  end

用户模型

  validates_confirmation_of :password
  attr_accessible :password_confirmation
  attr_accessor :password

2 个答案:

答案 0 :(得分:10)

将以下行添加到模型中

    validates :password, confirmation: true

答案 1 :(得分:3)

仅仅使用has_secure_password为时已晚?您可以在此RailsCast中了解它:

http://railscasts.com/episodes/270-authentication-in-rails-3-1

我不确定你为什么if request.post?。这不是由您的路线决定的吗?

根据validates_confirmation_of的文档,我认为您可能需要添加:

validates_presence_of :password_confirmation, :if => :password_changed?

这是文档:

http://apidock.com/rails/ActiveModel/Validations/HelperMethods/validates_confirmation_of

文档似乎表明您不需要attr_accessible :password_confirmation

我希望有所帮助。