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

Rails 3 с настройкой для аутентификации - как мне вручную создать пользователя?

Я хотел бы вручную создать новый User s, не заставляя их проверять их адрес электронной почты.

Идея состоит в том, чтобы позволить существующим пользователям автоматически добавлять своих друзей, не требуя их регистрации. Это имеет смысл для бизнес-кейса, над которым я работаю.

Как это можно достичь с помощью Devise?

4b9b3361

Ответ 1

Метод skip_confirmation! доступен для любой модели confirmable.

@user = User.new params[:user]
@user.skip_confirmation! # Sets confirmed_at to Time.now, activating the account
@user.save

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

Devise использует условные обратные вызовы для генерации токена подтверждения и отправки электронной почты. Обратные вызовы будут вызываться, только если confirmation_required? возвращает true. Переопределите его на своей модели:

def confirmation_required?
  false
end

Однако это приведет к тому, что метод active_for_authentication? всегда возвращает true, потому что он принимает или не требует подтверждения. Мы также должны переопределить это:

def active_for_authentication?
  confirmed? || confirmation_period_valid?
end

Таким образом, учетная запись останется неактивной, и письмо с подтверждением не будет отправлено. Вам нужно будет вручную активировать пользователя, вызвав confirm! в записи или просто установив confirmed_at в любую дату.

Это довольно хак, но он должен работать.

Для справки: confirmable.rb

Ответ 2

Я просто хочу добавить для будущей ссылки, что, поскольку Devise 2.2 теперь имеет доступ к методу skip_confirmation_notification!, который в основном делает все из сообщения Matheus без переопределения методов в модели.