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

Разработать - создать учетную запись пользователя с подтверждением без отправки по электронной почте?

Я интегрировал разработку с помощью facebook. Теперь, когда я создаю учетную запись пользователя после входа пользователя в свою учетную запись facebook,

  user = User.create(:email => data["email"], 
                     :password => Devise.friendly_token[0,20]) 
  user.confirmed_at = DateTime.now
  user.save!

хотя учетная запись подтверждена, письмо с подтверждением по-прежнему запускается. Любая идея, как я могу отключить электронную почту?

4b9b3361

Ответ 1

Подтверждение обратного вызова происходит после создания, поэтому это происходит в строке 1 вашего примера, прежде чем вы установите confirmed_at вручную.

В соответствии с комментариями наиболее правильной задачей было бы использовать метод, предоставляемый для этой цели, #skip_confirmation!. Настройка confirmed_at вручную будет работать, но она обходит предоставленный API, что, по возможности, следует избегать.

Итак, что-то вроде:

user = User.new(user_attrs)
user.skip_confirmation!
user.save!

Оригинальный ответ:

Если вы передаете confirmed_at вместе с вашими аргументами create, почта не должна отправляться, поскольку проверка того, была ли или нет учетная запись уже "подтверждена", заключается в том, чтобы посмотреть, установлена ​​ли эта дата.

User.create(
  :email => data['email'], 
  :password => Devise.friendly_token[0,20], 
  :confirmed_at => DateTime.now
)

Это или просто используйте new вместо create для создания вашей пользовательской записи.

Ответ 2

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

user = User.new(your, args)
user.skip_confirmation_notification!
user.save!

См. документация

Пропустить отправку сообщения об уведомлении о подтверждении/повторном подтверждении after_create/after_update. В отличие от #skip_confirmation!, запись еще требует подтверждения.