Вот моя ситуация, я использую программу, чтобы пользователи могли создавать учетную запись на мой сайт и управлять их аутентификацией. Во время процесса регистрации я разрешаю клиентам изменять некоторые вариантов, что приводит к созданию фактически другой учетной записи, но все еще основанный на одном и том же ключевом ресурсе пользователя. Я бы хотел, чтобы не отправлять письмо с подтверждением для некоторых из эти типы счетов. Мне все равно, если учетная запись не подтвердится и пользователь не может войти в систему, это нормально, нет pb с этим. Как мне это сделать? Благодаря, Alex
Придумайте: возможно ли НЕ отправить письмо с подтверждением в определенных случаях? (даже если подтвержденный активен)
Ответ 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