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)
有人可以解释一下吗?
默认情况下,Devise有三个密码字段edit_user_registration:password,password_confirmation和current_password:默认注册/ edit.html.erb
任何更改都需要current_password; 如果不应该更改密码,则可以将其他两个留空.
将此代码放在您的用户模型中:
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)
| 归档时间: |
|
| 查看次数: |
5811 次 |
| 最近记录: |