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

时间:2013-12-18 10:57:36

标签: ruby-on-rails ruby devise user-accounts

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

1 error prohibited this user from being saved: ×
Current password can't be blank

在我的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

有人可以解释一下吗?

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:0)

我不知道你是否得到了解决方案,但你可以做一件简单的事情:

创建一个user_controller,然后创建一个user_params,其中包含password和password_confirmation,另一个(我使用此名称:user_params_without_password),没有密码和password_confirmation。

在您的更新中,您将检查密码是否存在,是,您将使用user_params,如果没有,则使用user_params_without_password。

以下是代码:

$('img').attr('src', 'newimagesource.jpg');

我希望这个提示可以帮助你:)

答案 3 :(得分:0)

默认情况下,设计需要密码才能更新用户。

这是一个包含更改此行为的主管说明的页面:https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-account-without-providing-a-password