Как настроить подтверждение по электронной почте с помощью Devise?

127

Есть ли руководство, в котором объясняется, как настроить электронное письмо с подтверждением регистрации Devise с нуля (как в разработке, так и в производстве), то есть если у вас не настроен Action Mailer?

Поиск в Google только что обнаружил кучу отдельных частей, связанных с этим. Ни одна часть не объясняет достаточно, и я не уверен, как они сочетаются друг с другом. Есть ли там пошаговое объяснение или даже что-то, что объясняет начальные шаги?


Наконец он заработал. Выполнил все шаги в принятом ответе ниже, а затем добавил следующее в мой файл 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
источник

Ответы:

208

1. Убедитесь, что вы включили подтверждаемое в вызов Model.devise

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

2. Убедитесь, что вы добавили подтверждаемые данные в миграцию пользователей.

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

Если вы используете devise 2.0+, это не сработает, потому что devise больше не предоставляет помощников по миграции, и поэтому t.confirmableвозникает ошибка. Вместо этого скопируйте блок с пометкой «Подтверждаемый» из их руководства по миграции .

3. Сгенерируйте представления devise с помощью любой из следующих команд, чтобы вы могли переопределить представления рассылки devise:

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

Теперь вы можете переопределить представления почтовой программы в devise/mailer/confirmation_instructions.html.erbили в users/mailer/confirmation_instructions.html.erbзависимости от вашей настройки

4. Для среды разработки добавьте следующие строки конфигурации в/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. Для производственной среды /config/environments/production.rbвы можете использовать что-то вроде следующего (предположим, что у вас есть SMTP-сервер на 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 Чтобы протестировать настройку в процессе разработки, установите гем mailcatcher, который вы будете использовать в качестве SMTP-сервера в разработке, перехватывая все входящие письма и отображая их на http://localhost:1080/:

gem install mailcatcher

После установки запустите сервер mailcatcher с помощью команды:

mailcatcher

Игрушечный SMTP-сервер будет работать на порту 1025, перехватывая электронные письма и отправляя их на HTTP-порт 1080.

Теперь вы можете создать учетную запись и увидеть подтверждения.

clyfe
источник
Вау, спасибо за этот удивительно исчерпывающий ответ. У меня он работает так, что почтовый сборщик улавливает электронные письма, но на самом деле электронное письмо не появляется в моем почтовом ящике. Я пробовал два разных адреса электронной почты и проверил папки со спамом на обоих. Что-то мне здесь может не хватать? (Я в режиме разработки).
jyli7
1
В процессе разработки вам не нужно фактически доставлять электронные письма по адресу. Mailcatcher имеет веб-интерфейс на localhost: 1080, который вы можете открывать и видеть перехваченные электронные письма - в этом его суть, чтобы упростить вам разработку. Однако в производстве вы хотите использовать настоящий SMTP-сервер (Google Apps, qmail, postfix и т. Д. Общаются с вашим системным администратором)
clyfe
3
И не забудьте перезагрузить сервер!
Мэтт Бонд
10
Devise 2.0 больше не предоставляет помощников по миграции, поэтому t.confirmableвозникает ошибка. Вместо этого скопируйте блок с пометкой «Подтверждаемый» из их руководства по миграции: github.com/plataformatec/devise/wiki/…
Росс Аллен,
1
Замечательный учебник ... спасибо, что поделился .. +1 .. Также стоит посмотреть, как: Добавить: подтверждается на страницу пользователей .
Аруп Ракшит
7

Я считаю, что вам следует отредактировать его еще раз ... номер порта. должны быть в кавычках .. Вот так: -

:port => "587",

Столкнулся с проблемой в rails 3.2.0 / ruby ​​1.9.2


источник
Верный. Или "1025"при использовании mailcatcher.
Этьен