devise
https://github.com/plataformatec/devise
Ruby
Flexible authentication solution for Rails with Warden.
Devise::Models::Authenticatable#send_devise_notification
This is an internal method called every time Devise needs
to send a notification/mail. This can be overridden 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, *args)
# If the record is new or changed then delay the
# delivery until the after_commit callback otherwise
# send now because after_commit will not be called.
if new_record? || changed?
pending_notifications << [notification, args]
else
message = devise_mailer.send(notification, self, *args)
Remove once we move to Rails 4.2+ only.
if message.respond_to?(:deliver_now)
message.deliver_now
else
message.deliver
end
end
end
def send_pending_notifications
pending_notifications.each do |notification, args|
message = devise_mailer.send(notification, self, *args)
Remove once we move to Rails 4.2+ only.
if message.respond_to?(:deliver_now)
message.deliver_now
else
message.deliver
end
end
# Empty the pending notifications array because the
# after_commit hook can be called multiple times which
# could cause multiple emails to be sent.
pending_notifications.clear
end
def pending_notifications
@pending_notifications ||= []
end
endEdit
git clone [email protected]:plataformatec/devise.git
cd devise
open lib/devise/models/authenticatable.rb
Contribute
# Make a new branchgit checkout -b -your-name--update-docs-Devise--Models--Authenticatable-send_devise_notification-for-pr
# Commit to gitgit add lib/devise/models/authenticatable.rbgit commit -m "better docs for Devise::Models::Authenticatable#send_devise_notification"
# Open pull requestgem install hub # on a mac you can `brew install hub`
hub fork
git push <your name> -your-name--update-docs-Devise--Models--Authenticatable-send_devise_notification-for-pr
hub pull-request
# Celebrate!