web-dev-qa-db-fra.com

Concevoir - créer un compte utilisateur avec confirmé sans envoyer d'e-mail?

J'ai intégré devise avec facebook. Maintenant, lorsque je crée un compte d'utilisateur après que l'utilisateur s'est connecté avec son compte Facebook,

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

même si le compte a été confirmé, un e-mail de confirmation est toujours renvoyé. Avez-vous une idée de comment désactiver le déclenchement du courrier électronique?

58
disappearedng

Le rappel de confirmation se produit après la création, il se produit donc sur la ligne 1 de votre exemple, avant de définir confirmed_at manuellement.

Selon les commentaires, la chose la plus correcte à faire serait d'utiliser la méthode prévue à cet effet, #skip_confirmation! . Réglage confirmed_at fonctionnera manuellement, mais il contourne l'API fournie, ce qui devrait être évité dans la mesure du possible.

Donc, quelque chose comme:

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

Réponse originale:

Si vous passez le confirmed_at avec vos arguments create, le message ne doit pas être envoyé, car le test pour savoir si un compte est déjà "confirmé" consiste à vérifier si cette date est définie ou non.

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

Cela, ou utilisez simplement new au lieu de create pour créer votre enregistrement utilisateur.

136
numbers1311407

Si vous souhaitez simplement empêcher l'envoi de l'e-mail, vous pouvez utiliser #skip_confirmation_notification, ainsi:

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

Voir documentation

Ignore l'envoi de l'e-mail de notification de confirmation/reconfirmation after_create/after_update. Contrairement à #skip_confirmation !, l'enregistrement nécessite toujours une confirmation.

11
Benjamin Crouzier