Jak skonfigurować potwierdzenie e-mail w Devise?

127

Czy istnieje samouczek, który wyjaśnia, jak skonfigurować od podstaw wiadomość e-mail z potwierdzeniem rejestracji Devise (zarówno w fazie rozwoju, jak i produkcji), tj. Jeśli nie masz skonfigurowanego programu Action Mailer?

Wyszukiwarka Google właśnie znalazła kilka oddzielnych elementów związanych z tym. Żaden kawałek nie wyjaśnia wystarczająco i nie jestem pewien, jak do siebie pasują. Czy istnieje wyjaśnienie krok po kroku, a nawet coś, co wyjaśnia pierwsze kroki?


Wreszcie udało się. Wykonałem wszystkie kroki zaakceptowanej odpowiedzi poniżej, a następnie dodałem następujący plik do mojego pliku 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
źródło

Odpowiedzi:

208

1. Upewnij się, że w wywołaniu Model.devise uwzględniono możliwość potwierdzenia

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

2. Upewnij się, że dodano możliwość potwierdzenia do migracji użytkownika

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

Jeśli używasz devise 2.0+, kończy się to niepowodzeniem, ponieważ devise nie zapewnia już pomocników migracji, a więc t.confirmablepowoduje błąd. Zamiast tego skopiuj blok z etykietą „Do potwierdzenia” z ich przewodnika po migracji .

3. Wygeneruj widoki devise za pomocą jednego z następujących poleceń, aby można było nadpisać widoki devise mailer:

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

Możesz teraz przesłonić widoki mailera w devise/mailer/confirmation_instructions.html.erblub w users/mailer/confirmation_instructions.html.erbzależności od konfiguracji

4. W przypadku środowiska programistycznego dodaj następujące wiersze konfiguracji/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. Dla środowiska produkcyjnego/config/environments/production.rb możesz użyć czegoś podobnego do następującego (zakładając, że masz serwer SMTP na hoście lokalnym: 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 Aby przetestować konfigurację w fazie rozwoju, zainstaluj gem mailcatchera, którego będziesz używać jako serwera SMTP w trakcie tworzenia, przechwytujący wszystkie przychodzące wiadomości i wyświetlający je na http://localhost:1080/:

gem install mailcatcher

Po zainstalowaniu uruchom serwer mailcatcher poleceniem:

mailcatcher

Zabawkowy serwer SMTP będzie działał na porcie 1025, przechwytując wiadomości e-mail i wyświetlając je na porcie HTTP 1080.

Możesz teraz założyć konto i zobaczyć potwierdzenia.

clyfe
źródło
Wow, dzięki za tę niezwykle wyczerpującą odpowiedź. Mam to tak, że łapacz poczty przechwytuje e-maile, ale żadna wiadomość e-mail nie pojawia się w mojej skrzynce odbiorczej. Wypróbowałem dwa różne adresy e-mail i sprawdziłem foldery spamu w obu. Czy jest coś, czego może mi tu brakować? (Jestem w trybie deweloperskim).
jyli7
1
W trakcie opracowywania nie musisz faktycznie dostarczać wiadomości e-mail na adres. Mailcatcher ma interfejs sieciowy na localhost: 1080 , który możesz otwierać i przeglądać przechwycone wiadomości e-mail - o to chodzi, aby ułatwić Ci programowanie. Jednak w środowisku produkcyjnym chcesz użyć prawdziwego serwera SMTP (Google Apps, qmail, postfix itp. Rozmawiaj z administratorem)
clyfe
3
I nie zapomnij zrestartować serwera!
Matt Bond
10
Devise 2.0 nie zapewnia już pomocników migracji, więc t.confirmablepowoduje błąd. Zamiast tego skopiuj blok oznaczony jako „Potwierdzalny” z ich przewodnika po migracji: github.com/plataformatec/devise/wiki/ ...
Ross Allen
1
Świetny samouczek ... dzięki za udostępnienie ... +1 .. Warto również zobaczyć Poradnik: Dodaj: potwierdzenie do strony Użytkownicy .
Arup Rakshit
7

Uważam, że powinieneś go jeszcze raz edytować ... port nr. powinno być w cudzysłowie .. W ten sposób: -

:port => "587",

Miałem problem z railsami 3.2.0 / ruby ​​1.9.2


źródło
Poprawny. Lub "1025"jeśli używasz mailcatchera.
Etienne