Devise ile e-posta onayını nasıl kurarım?


127

Devise'ın kayıt onay e-postasını sıfırdan (hem geliştirme hem de üretimde) nasıl kuracağınızı açıklayan bir eğitim var mı, yani Action Mailer kurulumunuz yoksa?

Google arama, bununla ilgili bir dizi ayrı parça ortaya çıkardı. Hiçbir parça yeterince açıklamaz ve birbirleriyle nasıl uyuştuklarından emin değilim. Orada adım adım bir açıklama var mı, hatta ilk adımları açıklayan bir şey var mı?


Sonunda işe yaradı. Aşağıdaki kabul edilen yanıttaki tüm adımları takip ettikten sonra, environment.rb dosyama şunları ekledim:

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]"
 }

Yanıtlar:


208

1. Model.devise çağrısına doğrulanabilir eklediğinizden emin olun

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

2. Kullanıcı geçişine onaylanabilir eklediğinizden emin olun

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

Eğer devise 2.0+ kullanıyorsanız bu başarısız olur, çünkü devise artık geçiş yardımcıları sağlamaz ve bu nedenle t.confirmablehata verir. Bunun yerine, geçiş kılavuzlarından "Onaylanabilir" etiketli bloğu kopyalayın .

3. Tasarlanan postacı görünümlerini geçersiz kılabilmek için aşağıdaki komutlardan biriyle cihaz görünümleri oluşturun:

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

Artık posta görünümlerini kurulumunuza bağlı olarak devise/mailer/confirmation_instructions.html.erbveya içinde geçersiz kılabilirsiniz.users/mailer/confirmation_instructions.html.erb

4. için geliştirme ortamında şu yapılandırma satırları ekleyin/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. için üretim çevreye /config/environments/production.rbaşağıdakine benzer bir şey kullanabilir (: 25 localhostla bir SMTP sunucusu var varsayarak):

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 Kurulumu geliştirme aşamasında test etmek için, geliştirmede SMTP sunucusu olarak kullanacağınız, tüm gelen postaları yakalayıp şurada görüntüleyeceğiniz posta yakalayıcı mücevherini kurun http://localhost:1080/:

gem install mailcatcher

Kurulduktan sonra posta yakalayıcı sunucusunu şu komutla başlatın:

mailcatcher

Bir oyuncak SMTP sunucusu, 1025 numaralı bağlantı noktasında çalışarak e-postaları yakalar ve bunları 1080 HTTP bağlantı noktası üzerinden gönderir.

Artık bir hesap oluşturabilir ve onayları görebilirsiniz.


Vay canına, bu inanılmaz kapsamlı cevap için teşekkürler. Posta yakalayıcı e-postaları yakalayacak şekilde çalıştırdım, ancak gelen kutumda e-posta görünmüyor. İki farklı e-posta adresini denedim ve her ikisinde de spam klasörlerini kontrol ettim. Burada eksik olabileceğim bir şey var mı? (Geliştirme modundayım).
jyli7

1
Geliştirme aşamasında e-postaları adrese göndermeniz gerekmez. Mailcatcher, localhost: 1080'de yakalanan e-postaları açıp görebileceğiniz bir web arayüzüne sahiptir - geliştirme aşamasında işinizi kolaylaştırmak için işin amacı budur. Bununla birlikte, üretimde gerçek bir SMTP sunucusu kullanmak istiyorsunuz (Google Apps, qmail, postfix vb.
Sistem

3
Ve sunucunuzu yeniden başlatmayı unutmayın!
Matt Bond

10
Devise 2.0 artık geçişe yardımcı olmuyor ve bu nedenle t.confirmablehata veriyor. Bunun yerine, geçiş kılavuzlarından " Onaylanabilir
Ross Allen 13

1
Harika öğretici ... Paylaştığınız için teşekkürler .. +1 .. Ayrıca bkz. Nasıl Yapılır: Ekleme: Kullanıcılar sayfasına onaylanabilir .
Arup Rakshit

7

Bir kez daha düzenlemeniz gerektiğine inanıyorum ... bağlantı noktası no. tırnak içinde olmalıdır .. Bunun gibi: -

:port => "587",

Raylarda 3.2.0 / Ruby 1.9.2'de bir sorunla karşılaştım


Doğru. Veya posta "1025"yakalayıcı kullanıyorsanız.
Etienne

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.