Consider how to override send_confirmation_instructions

I am trying to override the send_confirmation_instructions method as shown below:

http://trackingrails.com/posts/devise-send-confirmation-mail-manually-or-delay-them

from:

def send_confirmation_instructions generate_confirmation_token! if self.confirmation_token.nil? ::Devise.mailer.delay.confirmation_instructions(self) end 

This seems to no longer work with the latest development version. The developer docs show how to override the controller, but not the model. Any suggestions on how to override the development model? Thanks

+6
source share
2 answers

When you configure Devise, you say which model it works with (for example, with the user); many / most of its methods apply to this class. So, when you want to redefine the material.

Here is a comment from the Devise code in lib/devise/models/authenticatable.rb that describes almost what you want to do if I read correctly.

  # This is an internal method called every time Devise needs # to send a notification/mail. This can be overriden if you # need to customize the e-mail delivery logic. For instance, # if you are using a queue to deliver e-mails (delayed job, # sidekiq, resque, etc), you must add the delivery to the queue # just after the transaction was committed. To achieve this, # you can override send_devise_notification to store the # deliveries until the after_commit callback is triggered: # # class User # devise :database_authenticatable, :confirmable # # after_commit :send_pending_notifications # # protected # # def send_devise_notification(notification) # pending_notifications << notification # end # # def send_pending_notifications # pending_notifications.each do |n| # devise_mailer.send(n, self).deliver # end # end # # def pending_notifications # @pending_notifications ||= [] # end # end # def send_devise_notification(notification) devise_mailer.send(notification, self).deliver end 
+7
source

Why not use devise-async ?

 Usage Devise >= 2.1.1 Include Devise::Async::Model to your Devise model class User < ActiveRecord::Base devise :database_authenticatable, :confirmable # etc ... include Devise::Async::Model # should be below call to `devise` end Devise < 2.1.1 Set Devise::Async::Proxy as Devise mailer in config/initializers/devise.rb: # Configure the class responsible to send e-mails. config.mailer = "Devise::Async::Proxy" All Set your queuing backend by creating config/initializers/devise_async.rb: # Supported options: :resque, :sidekiq, :delayed_job Devise::Async.backend = :resque 
0
source

Source: https://habr.com/ru/post/927415/


All Articles