Làm cách nào để thiết lập xác nhận email với Devise?


127

Có hướng dẫn nào giải thích cách thiết lập email xác nhận đăng ký của Devise từ đầu (trong cả phát triển và sản xuất), tức là nếu bạn không thiết lập Action Mailer?

Google tìm kiếm vừa xuất hiện một loạt các mảnh riêng biệt liên quan đến điều này. Không một mảnh nào giải thích đủ, và tôi không chắc chúng khớp với nhau như thế nào. Có một lời giải thích từng bước ngoài kia, hoặc thậm chí một cái gì đó giải thích các bước ban đầu?


Cuối cùng đã làm cho nó hoạt động. Thực hiện theo tất cả các bước trong câu trả lời được chấp nhận bên dưới, sau đó thêm phần sau vào tệp môi trường của tôi:

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

Câu trả lời:


208

1. Đảm bảo bạn bao gồm xác nhận trong cuộc gọi Model.devise

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

2. Đảm bảo bạn thêm xác nhận vào di chuyển người dùng

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

Nếu bạn đang sử dụng devise 2.0+ thì điều này không thành công vì devise không còn cung cấp trình trợ giúp di chuyển nữa và do đó t.confirmablesẽ gây ra lỗi. Thay vào đó, sao chép khối có nhãn "Có thể xác nhận" từ hướng dẫn di chuyển của họ .

3. Tạo các chế độ xem phát minh, với một trong các lệnh sau, để bạn có thể ghi đè các chế độ xem của trình phát thư:

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

Bây giờ bạn có thể ghi đè các chế độ xem của người gửi thư trong devise/mailer/confirmation_instructions.html.erbhoặc users/mailer/confirmation_instructions.html.erbtùy thuộc vào thiết lập của bạn

4. Đối với môi trường phát triển, thêm các dòng cấu hình sau vào/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 với môi trường sản xuất,/config/environments/production.rb bạn có thể sử dụng một cái gì đó tương tự như sau (giả sử bạn có máy chủ SMTP trên 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 Để kiểm tra thiết lập trong quá trình phát triển, hãy cài đặt đá quý mailcatcher, mà bạn sẽ sử dụng làm máy chủ SMTP đang phát triển, bắt tất cả các thư đến và hiển thị chúng trên http://localhost:1080/:

gem install mailcatcher

Sau khi cài đặt, khởi động máy chủ mailcatcher bằng lệnh:

mailcatcher

Một máy chủ SMTP đồ chơi sẽ chạy trên cổng 1025 để bắt email và chuyển chúng trên cổng HTTP 1080.

Bây giờ bạn có thể tạo một tài khoản và xem các xác nhận.


Wow, cảm ơn vì câu trả lời toàn diện đáng kinh ngạc. Tôi đã làm cho nó hoạt động sao cho trình bắt thư đang bắt email, nhưng không có email nào thực sự xuất hiện trong hộp thư đến của tôi. Tôi đã thử hai địa chỉ email khác nhau và kiểm tra cả hai thư mục thư rác. Có cái gì tôi có thể thiếu ở đây? (Tôi đang ở chế độ phát triển).
jyli7

1
Trong quá trình phát triển, bạn không cần phải thực sự gửi email đến địa chỉ. Mailcatcher có giao diện web trên localhost: 1080 mà bạn có thể mở và xem các email đã bắt - đó là điểm chính của nó, để giúp bạn phát triển đơn giản. Tuy nhiên, trong sản xuất, bạn muốn sử dụng máy chủ SMTP thực (Google Apps, qmail, postfix, v.v. nói chuyện với sysadmin của bạn)
clyfe

3
Và đừng quên khởi động lại máy chủ của bạn!
Matt Bond

10
Devise 2.0 không còn cung cấp trợ giúp di chuyển và do đó t.confirmablegây ra lỗi. Thay vào đó, hãy sao chép khối có nhãn "Có thể xác nhận" từ hướng dẫn di chuyển của họ: github.com/plataformatec/devise/wiki/iêu
Ross Allen

1
Hướng dẫn tuyệt vời ... cảm ơn vì đã chia sẻ .. +1 .. Cũng đáng để xem Cách làm: Thêm: có thể xác nhận vào trang Người dùng .
Arup Rakshit

7

Tôi tin rằng bạn nên chỉnh sửa nó một lần nữa ... cổng không. nên được trích dẫn .. Như thế này: -

:port => "587",

Tôi gặp phải một vấn đề trong rails 3.2.0 / ruby ​​1.9.2


Chính xác. Hoặc "1025"nếu sử dụng mailcatcher.
Etienne

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.