72 votes

Devise - créer un compte utilisateur avec confirmation sans envoyer d'email ?

J'ai intégré devise avec facebook. Maintenant, lorsque je crée un compte utilisateur après que l'utilisateur se soit 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 courriel de confirmation est toujours envoyé. Avez-vous une idée de la façon dont je peux désactiver l'envoi d'un courriel ?

162voto

numbers1311407 Points 15653

Le rappel de confirmation a lieu après la création, donc à la ligne 1 de votre exemple, avant que vous ne définissiez le paramètre 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 de confirmed_at manuellement fonctionnera, mais il contournera l'API fournie, ce qui doit ê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 ainsi que votre create arguments, le courrier ne doit pas être envoyé, car le test pour savoir si un compte est déjà "confirmé" ou non consiste à regarder si cette date est fixée ou non.

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

Cela, ou simplement utiliser new au lieu de create pour construire votre dossier d'utilisateur.

15voto

pinouchon Points 7706

Si vous voulez juste empêcher l'envoi de l'email, vous pouvez utiliser #skip_confirmation_notification comme ça :

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

Voir documentation

Ignore l'envoi de l'e-mail de notification de confirmation/confirmation après_création/après_mise à jour. Contrairement à #skip_confirmation !, l'enregistrement nécessite toujours nécessite toujours une confirmation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X