I've been following this how-to in the Devise wiki...
How To: Allow users to edit their account without providing a password
...to enable my users to change the account credential and update without providing their existing password.
However, I also want to use the Confirmable modules reconfirmable
functionality
Even though I have config.reconfirmable = true
set in my devise initializer file the controller doesn't seem to be sending the reconfirmable emails.
Any ideas what's wrong?
The issue was that the controller in the original How-to had various missing Devise methods required by the Confirmable module.
To get it to work I had to use as much of the original update
action as possible from the Devise::RegistrationsController
and also override the update_resource(resource, params)
action so that it didn't need a password to update the record.
So my bespoke RegistrationsController
now looks like this:
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
Hope this helps somebody!
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.