Придумайте: возможно ли НЕ отправить электронное письмо с подтверждением в определенных случаях?(даже когда подтверждено активно) - PullRequest
12 голосов
/ 25 января 2011

Здесь моя ситуация, я использую devise, чтобы позволить пользователям создавать учетные записи на мой сайт и управляйте их аутентификацией. В процессе регистрации я позволяю клиентам изменить некоторые варианты, что приводит к созданию фактически другой учетной записи, но по-прежнему на основе того же основного пользовательского ресурса. Я хотел бы отказаться от отправки электронного письма с подтверждением для некоторых из эти типы счетов. Мне все равно, если аккаунт не будет подтвержден и пользователь не может войти в систему, это нормально, нет. Как бы я поступил так? Спасибо, Alex

Ответы [ 5 ]

21 голосов
/ 25 января 2011

На самом деле это довольно легко, когда я копаю немного глубже.Просто переопределите один метод в вашей пользовательской модели (или что бы вы ни использовали):

    # Callback to overwrite if confirmation is required or not.
    def confirmation_required?
      !confirmed?
    end

Поставьте свои условия и работу сделали!

14 голосов
/ 06 октября 2015

Если вы просто хотите пропустить отправку электронного письма, но без подтверждения, используйте:

# Skips sending the confirmation/reconfirmation notification email after_create/after_update. Unlike
# #skip_confirmation!, record still requires confirmation.
@user.skip_confirmation_notification!

Если вы не хотите вызывать это в вашей модели с обратным вызовом, перезапишите этот метод:

def send_confirmation_notification?
  false
end
11 голосов
/ 14 декабря 2012

Вы также можете просто добавить следующую строку кода в свой контроллер перед созданием нового пользователя:

@user.skip_confirmation!
8 голосов
/ 23 августа 2011

Я не знаю, добавил ли Devise это после того, как были представлены другие ответы, но код для этого находится прямо в confirmable.rb:

  # If you don't want confirmation to be sent on create, neither a code
  # to be generated, call skip_confirmation!
  def skip_confirmation!
    self.confirmed_at = Time.now
  end
5 голосов
/ 28 апреля 2011

Я смог сделать что-то подобное с функциями:

registrations_controller.rb

def build_resource(*args)
    super
    if session[:omniauth] # TODO -- what about the case where they have a session, but are not logged in?
      @user.apply_omniauth(session[:omniauth])
      @user.mark_as_confirmed # we don't need to confirm the account if they are using external authentication
      # @user.valid?
    end
  end

А затем в моей модели пользователя:

user.rb

  def mark_as_confirmed
    self.confirmation_token = nil
    self.confirmed_at = Time.now
  end
...