Bagaimana cara saya mengatur konfirmasi email dengan Rancangan?

127

Apakah ada tutorial di luar sana yang menjelaskan cara mengatur email konfirmasi pendaftaran Devise dari awal (baik dalam pengembangan maupun produksi), yaitu jika Anda tidak menyiapkan Action Mailer?

Pencarian Google baru saja menghasilkan banyak potongan terpisah yang berkaitan dengan ini. Tidak ada yang menjelaskan cukup, dan saya tidak yakin bagaimana mereka cocok bersama. Apakah ada penjelasan langkah demi langkah di luar sana, atau bahkan sesuatu yang menjelaskan langkah-langkah awal?


Akhirnya berhasil. Ikuti semua langkah dalam jawaban yang diterima di bawah, lalu tambahkan yang berikut ke file environment.rb saya:

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

Jawaban:

208

1. Pastikan Anda memasukkan konfirmasi dalam panggilan Model.devise

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

2. Pastikan Anda menambahkan konfirmasi untuk migrasi pengguna

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

Jika Anda menggunakan alat 2.0+ ini gagal karena alat tidak lagi menyediakan bantuan migrasi, dan karenanya t.confirmablemenimbulkan kesalahan. Sebaliknya, salin blok berlabel "Dapat Dikonfirmasi" dari panduan migrasi mereka .

3. Hasilkan tampilan merancang, dengan salah satu dari perintah berikut, sehingga Anda dapat menimpa tampilan mailer merancang:

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

Anda sekarang dapat mengesampingkan tampilan mailer di devise/mailer/confirmation_instructions.html.erbatau users/mailer/confirmation_instructions.html.erbtergantung pada pengaturan Anda

4. Untuk lingkungan pengembangan tambahkan baris konfigurasi berikut di/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. Untuk lingkungan produksi di /config/environments/production.rbAnda dapat menggunakan sesuatu yang mirip dengan berikut (seandainya Anda memiliki server SMTP di 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 Untuk menguji pengaturan dalam pengembangan, instal gem mailcatcher, yang akan Anda gunakan sebagai server SMTP dalam pengembangan, tangkap semua email masuk dan tampilkan di http://localhost:1080/:

gem install mailcatcher

Setelah diinstal mulai server mailcatcher dengan perintah:

mailcatcher

Server SMTP mainan akan berjalan pada port 1025 menangkap email dan memindahkannya pada port HTTP 1080.

Anda sekarang dapat membuat akun dan melihat konfirmasi.

clyfe
sumber
Wow, terima kasih atas jawaban yang luar biasa komprehensif itu. Saya sudah membuatnya berfungsi sehingga penangkap surat menangkap email, tetapi tidak ada email yang benar-benar muncul di kotak masuk saya. Saya sudah mencoba dua alamat email yang berbeda dan memeriksa folder spam di keduanya. Apakah ada sesuatu yang mungkin saya lewatkan di sini? (Saya dalam mode pengembangan).
jyli7
1
Dalam pengembangan Anda tidak perlu benar-benar mengirimkan email ke alamat. Mailcatcher memiliki antarmuka web di localhost: 1080 yang dapat Anda buka dan lihat email yang ditangkap - itulah intinya, untuk memudahkan Anda dalam pengembangan. Namun dalam produksi, Anda ingin menggunakan server SMTP nyata (Google Apps, qmail, postfix, dll. Bicara dengan sysadmin Anda)
clyfe
3
Dan jangan lupa untuk me-restart server Anda!
Matt Bond
10
Rancangan 2.0 tidak lagi menyediakan bantuan migrasi, dan karenanya t.confirmablemenimbulkan kesalahan. Alih-alih, salin blok berlabel "Dapat Dikonfirmasi
Ross Allen
1
Tutorial yang luar biasa ... terima kasih telah berbagi .. +1 .. Juga layak untuk dilihat Cara: Tambahkan: dapat dikonfirmasikan ke halaman Pengguna .
Arup Rakshit
7

Saya yakin Anda harus mengeditnya sekali lagi ... no port. harus dalam tanda kutip .. Seperti ini: -

:port => "587",

Saya menghadapi masalah di rel 3.2.0 / ruby ​​1.9.2


sumber
Benar. Atau "1025"jika menggunakan mailcatcher.
Etienne