Comment configurer la confirmation par e-mail avec Devise?

127

Existe-t-il un tutoriel qui explique comment configurer le courrier électronique de confirmation d'inscription de Devise à partir de zéro (en développement et en production), c'est-à-dire si vous n'avez pas configuré Action Mailer?

La recherche Google vient de trouver un tas d'éléments séparés liés à cela. Aucun élément n'en explique assez, et je ne sais pas comment ils s'emboîtent. Y a-t-il une explication étape par étape, ou même quelque chose qui explique les étapes initiales?


Enfin ça marche. J'ai suivi toutes les étapes de la réponse acceptée ci-dessous, puis ajouté ce qui suit à mon fichier environment.rb:

ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
   :tls => true,
   :address => "smtp.gmail.com",
   :port => 587,
   :domain => "gmail.com",
   :authentication => :login,
   :user_name => "[username]",
   :password => "[password]"
 }
jyli7
la source

Réponses:

208

1. Assurez-vous d' inclure dans l' appel confirmable Model.devise

class User < ActiveRecord::Base
  devise :database_authenticatable, :confirmable ...
end

2. Assurez-vous d'ajouter confirmable à la migration de l'utilisateur

create_table :users do |t|
  t.database_authenticatable
  t.confirmable
  ...
end

Si vous utilisez devise 2.0+, cela échoue parce que devise ne fournit plus d'aide à la migration et génère donc t.confirmableune erreur. Au lieu de cela, copiez le bloc intitulé «Confirmable» de leur guide de migration .

3. Générez les vues de devise, avec l'une des commandes suivantes, afin de pouvoir remplacer les vues de mailer de devise:

rails generate devise:views # global
rails generate devise:views users # scoped

Vous pouvez désormais remplacer les vues de messagerie dans devise/mailer/confirmation_instructions.html.erbou en users/mailer/confirmation_instructions.html.erbfonction de votre configuration

4. Pour l' environnement de développement , ajoutez les lignes de configuration suivantes dans/config/environments/development.rb

config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {:address => "localhost", :port => 1025}

5. Pour l' environnement de production dans, /config/environments/production.rbvous pouvez utiliser quelque chose de similaire à ce qui suit (en supposant que vous ayez un serveur SMTP sur localhost: 25):

config.action_mailer.default_url_options = {:host => 'yourdomain.com'}
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  :address => "127.0.0.1",
  :port    => 25,
  :domain  => 'yourdomain.com'
}

6 Pour tester la configuration en développement, installez la gemme mailcatcher, que vous utiliserez comme serveur SMTP en développement, en récupérant tous les mails entrants et en les affichant sur http://localhost:1080/:

gem install mailcatcher

Une fois installé, démarrez le serveur mailcatcher avec la commande:

mailcatcher

Un serveur SMTP jouet fonctionnera sur le port 1025 pour récupérer les e-mails et les afficher sur le port HTTP 1080.

Vous pouvez maintenant créer un compte et voir les confirmations.

clyfe
la source
Wow, merci pour cette réponse incroyablement complète. Je l'ai fait fonctionner de telle sorte que le receveur de courrier attrape les e-mails, mais aucun e-mail n'apparaît réellement dans ma boîte de réception. J'ai essayé deux adresses e-mail différentes et vérifié les dossiers de spam dans les deux. Y a-t-il quelque chose qui me manque peut-être ici? (Je suis en mode développement).
jyli7
1
En développement, vous n'avez pas besoin de livrer les e-mails à l'adresse. Mailcatcher a une interface Web sur localhost: 1080 que vous pouvez ouvrir et voir les e-mails capturés - c'est le but, pour vous simplifier la tâche dans le développement. En production cependant, vous souhaitez utiliser un vrai serveur SMTP (Google Apps, qmail, postfix, etc. parlez à votre administrateur système)
clyfe
3
Et n'oubliez pas de redémarrer votre serveur!
Matt Bond
10
Devise 2.0 ne fournit plus d'aide à la migration et génère donc t.confirmableune erreur. À la place, copiez le bloc intitulé "Confirmable" de leur guide de migration: github.com/plataformatec/devise/wiki/…
Ross Allen
1
Tutoriel génial ... merci pour le partage .. +1 .. Il vaut également la peine de voir Comment: Ajouter: confirmable à la page Utilisateurs .
Arup Rakshit
7

Je crois que vous devriez le modifier une fois de plus ... port no. devrait être entre guillemets. Comme ceci: -

:port => "587",

J'ai rencontré un problème dans les rails 3.2.0 / ruby ​​1.9.2


la source
Correct. Ou "1025"si vous utilisez mailcatcher.
Etienne