Як налаштувати підтвердження електронної пошти за допомогою 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]"
 }

Відповіді:


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+, це не вдається, оскільки пристрій більше не надає помічників міграції, і це t.confirmableвикликає помилку. Замість цього скопіюйте блок із написом "Підтверджується" з їх посібника з міграції .

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

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 Для тестування налаштувань у розробці встановіть gem mailcatcher, який ви будете використовувати як сервер SMTP при розробці, виловлюючи всі вхідні листи та відображаючи їх на http://localhost:1080/:

gem install mailcatcher

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

mailcatcher

Іграшковий SMTP-сервер буде працювати на порті 1025, що збирає електронні листи та відображатиме їх на HTTP-порту 1080.

Тепер ви можете створити обліковий запис і переглянути підтвердження.


Нічого, дякую за цю дивовижно вичерпну відповідь. У мене це працює так, що ловець пошти ловить електронні листи, але жодна електронна пошта насправді не з’являється у моїй скриньці. Я спробував дві різні адреси електронної пошти і перевірив папки спаму в обох. Щось тут я можу бракувати? (Я в режимі розробки).
jyli7

1
У процесі розробки вам не потрібно фактично доставляти електронні листи на адресу. Mailcatcher має веб-інтерфейс для localhost: 1080, який ви можете відкрити і побачити схоплені електронні листи - ось у чому справа, щоб зробити його простішим у розвитку. Однак у виробництві ви хочете використовувати справжній SMTP-сервер (Google Apps, qmail, postfix та ін., Розмовляйте зі своїм sysadmin)
clyfe

3
І не забудьте перезапустити ваш сервер!
Метт Бонд

10
Devise 2.0 більше не надає помічників з міграції, і тому t.confirmableвиникає помилка. Натомість скопіюйте блок із написом "Підтверджується" з їх посібника з міграції: github.com/plataformatec/devise/wiki/…
Ross Allen

1
Дивовижний підручник ... дякую за обмін .. +1 .. Також варто переглянути як: Додати: підтверджується на сторінку користувачів .
Arup Rakshit

7

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

:port => "587",

Я зіткнувся з проблемою в рейках 3.2.0 / рубін 1.9.2


Правильно. Або "1025"якщо ви використовуєте mailcatcher.
Етьєнн

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.