我正在使用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
有人可以解释一下吗?
答案 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