ฉันจะตั้งค่าการยืนยันอีเมลกับ 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

หากคุณใช้อุปกรณ์รุ่น 2.0+ สิ่งนี้จะล้มเหลวเนื่องจากอุปกรณ์ไม่ได้ให้ตัวช่วยในการย้ายข้อมูลอีกต่อไปและt.confirmableทำให้เกิดข้อผิดพลาด แต่คัดลอกบล็อกที่มีข้อความ "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ในการทดสอบการตั้งค่าในการพัฒนาให้ติดตั้ง mailcatcher gem ซึ่งคุณจะใช้เป็นเซิร์ฟเวอร์ 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
และอย่าลืมรีสตาร์ทเซิร์ฟเวอร์ของคุณ!
Matt Bond

10
Devise 2.0 ไม่ได้ให้ความช่วยเหลือในการย้ายข้อมูลอีกต่อไปและt.confirmableทำให้เกิดข้อผิดพลาด ให้คัดลอกบล็อกที่มีข้อความว่า "ยืนยันได้" จากคู่มือการย้ายข้อมูล: github.com/plataformatec/devise/wiki/…
Ross Allen

1
การสอนที่ยอดเยี่ยม ... ขอบคุณสำหรับการแบ่งปัน .. +1 .. นอกจากนี้ยังควรดูวิธีการเพิ่ม: ยืนยันได้ในหน้าผู้ใช้
อรุณรักชิต

7

ฉันเชื่อว่าคุณควรแก้ไขอีกครั้ง ... port no. ควรอยู่ในเครื่องหมายคำพูด .. ดังนี้: -

:port => "587",

ฉันประสบปัญหาในราง 3.2.0 / ทับทิม 1.9.2


แก้ไข. หรือ"1025"ถ้าใช้ mailcatcher.
Etienne

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.