新密码只接受旧密码而不是不同的密码

时间:2014-02-06 09:49:24

标签: ruby-on-rails ruby-on-rails-3 devise passwords

在rails 3.2.13项目中,我使用的是设计插件。 如果我要更改密码,那么我需要为所有3个字段输入current_password,如果我尝试输入new_password&的不同密码confirm_password字段然后会显示“当前密码无效”等错误消息。

我已提到https://github.com/plataformatec/devise/blob/bf5bcd52cb9edaefb002927434d7ede398e74bc5/lib/devise/models/database_authenticatable.rb#L46

在模特中,

def valid_password?(password)
 return false if encrypted_password.blank?
 bcrypt   = ::BCrypt::Password.new(encrypted_password)
 password = ::BCrypt::Engine.hash_secret("#{password}#{self.class.pepper}", bcrypt.salt)
 Devise.secure_compare(password, encrypted_password)
end

def update_with_password(params, *options)
 current_password = params.delete(:current_password)

 if params[:password].blank?
   params.delete(:password)
   params.delete(:password_confirmation) if params[:password_confirmation].blank?
 end

 result = if valid_password?(current_password)
   update_attributes(params, *options)
 else
   self.assign_attributes(params, *options)
   self.valid?
   self.errors.add(:current_password, current_password.blank? ? :blank : :invalid)
   false
 end
 result
end

在控制器中,

@user.update_with_password(params["user"])

验证应该像

一样工作
  • 当前密码&新密码应该存在

  • 如果用户在current_password字段中输入了错误的密码,那么它应该检查是否有效

  • 新密码&确认密码应符合

E.g:

1st case: (shows invalid password message)

Current Password = "password"
New Password = "abcdefg"
Confirm Password = "abcdefg"

2nd case: (accepts successfully)

Current Password = "password"
New Password = "password"
Confirm Password = "password"

如何通过输入不同的密码而不是当前(旧)密码来更改密码?

0 个答案:

没有答案