我一直在Devise wiki中关注这个方法......
How To: Allow users to edit their account without providing a password
...让我的用户可以更改帐户凭据并在不提供现有密码的情况下进行更新。
但是,我还想使用Confirmable模块reconfirmable
功能
即使我在设计初始化程序文件中设置了config.reconfirmable = true
,控制器也似乎无法发送可重新启动的电子邮件。
任何想法有什么不对?
答案 0 :(得分:3)
问题在于原始操作方法中的控制器具有可确认模块所需的各种缺失的设计方法。
为了让它发挥作用,我必须尽可能多地使用update
中的原始Devise::RegistrationsController
操作,并覆盖update_resource(resource, params)
操作,以便它不会需要密码来更新记录。
所以我的定制RegistrationsController
现在看起来像这样:
class Users::RegistrationsController < Devise::RegistrationsController
def update
update_params = account_update_params
# required for settings form to submit when password is left blank
if update_params[:password].blank?
[:password,:password_confirmation,:current_password].collect{|p| update_params.delete(p) }
end
if update_params[:password].present? and update_params[:current_password].blank?
[:current_password].collect{|p| update_params.delete(p) }
end
self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key)
prev_unconfirmed_email = resource.unconfirmed_email if resource.respond_to?(:unconfirmed_email)
if update_resource(resource, update_params)
yield resource if block_given?
if is_flashing_format?
flash_key = update_needs_confirmation?(resource, prev_unconfirmed_email) ?
:update_needs_confirmation : :updated
set_flash_message :notice, flash_key
end
sign_in resource_name, resource, bypass: true
respond_with resource, location: after_update_path_for(resource)
else
clean_up_passwords resource
respond_with resource
end
end
protected
def update_resource(resource, params)
resource.update_attributes(params)
end
end
希望这有助于某人!