我正在使用由devise生成的用户范围控制器来传递其他属性。
class Users::RegistrationsController < Devise::RegistrationsController
before_action :sign_up_params, only: [:create]
before_action :account_update_params, only: [:update
protected
def sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :cpf])
end
def account_update_params
devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :cpf, :birth_date, :phone, :gender])
end
def update_resource(resource, params)
resource.update_without_password(params)
end
end
路线
devise_for :users, controllers: {registrations: 'users/registrations}
一切正常,直到将 update_resource(resource,params)方法包含到控制器并删除视图中的 current_password字段,如建议https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-account-without-providing-a-password < / p>
在此更改之后,我可以编辑除密码之外的所有其他字段(first_name,last_name ...等)。密码更改不会持续存在。有什么想法吗?
Rails版本:5.0.0.1 设计版本:4.2.0
答案 0 :(得分:0)
在account_update_params
方法中,您需要添加password
和password_confirmation
。
def account_update_params
devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :cpf, :birth_date, :phone, :gender, :password, :password_confirmation])
end