Подтвердить что ты не робот

Придумайте: возможно ли НЕ отправить письмо с подтверждением в определенных случаях? (даже если подтвержденный активен)

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

4b9b3361

Ответ 1

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

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

Положите ваши условия и работу!

Алекс

Ответ 2

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

# 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

Ответ 3

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

@user.skip_confirmation!

Ответ 4

Я не знаю, добавил ли 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

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

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