更新设备帐户时,当前密码不能为空

use*_*830 4 ruby ruby-on-rails user-accounts devise

我正在使用devise,我想允许用户更新他的帐户(电子邮件和密码).因此,当我点击时edit_user_registration_path,我会看到一个用户可以更改其电子邮件和密码的页面.但是在提交此update表单时,我不断收到此消息:

1 error prohibited this user from being saved: ×
Current password can't be blank
Run Code Online (Sandbox Code Playgroud)

在我ApplicationController,我有

def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:name, :surname, :email, :user_name, :terms_of_service, :password, :password_confirmation) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation) }
end
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?

jan*_*oeh 5

默认情况下,Devise有三个密码字段edit_user_registration:password,password_confirmation和current_password:默认注册/ edit.html.erb

任何更改都需要current_password; 如果不应该更改密码,则可以将其他两个留空.


Aat*_*thi 5

将此代码放在您的用户模型中:

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 params[:password].blank? || 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

    clean_up_passwords
    result
end
Run Code Online (Sandbox Code Playgroud)