iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0
SideProject30

用 Rails 打造你的電商網站系列 第 2

Day 02 成為會員前的一封信

  • 分享至 

  • xImage
  •  

會員註冊後,我們可以寄一封驗證信給他們,

不然怎麼會知道他填的是不是他本人的呢?

我們會使用到 Devise 的 Mailer 跟 Devise

那我們就開始吧!

Step 1 環境寄信及 Devise 寄信方法設定

我們在昨天有把 Confirmable 這塊模組解除註解,

所以就不用重新 rollback 及 migrate 了

在 development 的環境中,信件並不會真的被送出,

我們必須要做些設定才會被送出

default_url_options 指的是在我送出去的信件中,信件內容的網址網域是什麼,而我們目前是開發模式,尚未有網域,就先填寫成 localhost 3000

perform_deleveries 這個設定決定於信件會不會真的發送出去,因為我們真的要送出,所以需要設定成 true

# config/environments/development.rb

  config.action_mailer.default_url_options = { host: 'http://localhost:3000' }

  config.action_mailer.perform_deliveries = true

Step 2 拿 Mailgun 的 SMTP 設定

接下來要設定 email 的相關東西了,這邊我們會用 mailgun

為什麼選他?沒為什麼,因為有免費額度

我們就先跳到 mailgun 官網,完成註冊流程後

切換到 Sending 底下的 Domains

https://ithelp.ithome.com.tw/upload/images/20230917/20150947AN0LTk39A8.png

右邊應該會跳出一組 sandboxxxxxx.mailgun.org 的網域

點選進去後,選擇 SMTP,下方就會出現一串 SMTP 的資訊

先留著這頁,我們待會設定會用到

Step 3 將 SMTP 參數丟進設定中

我們需要在 smtp_setting 設定,smtp_setting 裡可以設定一些:

  • address 是指 SMTP 伺服器的位置,我們使用 mailgun,請填寫剛剛 mailgun SMTP 頁面資訊的 SMTP hostname 的參數

  • port 設定為 mailgun 推薦的 587

  • domain 可填寫為你的網域

  • user_name 為 Mailgun 的 Username,我們在發送信件時, SMTP 會去驗證我們的 user_name 及 password,確定後才會開始寄信動作

  • password 為 Mailgun 的 Default password

  • authentication 是指驗證方式為 plain,剛有提到 SMTP 在發送信件以前會驗證寄件人的帳號密碼,在驗證過程中需傳遞資料給伺服器, plain 是在這傳遞過程中的安全驗證方式

  • enable_starttls_auto STARTTLS 是一種用於加密通信的協議,SMTP 伺服器用它來保護敏感資訊,在傳輸過程中不被竊聽

像是 user_name 及 password 這種敏感資訊,建議都用環境變數來設定會比較好唷

# config/environments/development.rb

  config.action_mailer.smtp_settings = {
    address:              'smtp.mailgun.org',
    port:                 587,
    domain:               'ishop',
    user_name:            ENV['MAILGUN_USERNAME'],
    password:             ENV['MAILGUN_PASSWORD'],
    authentication:       'plain',
    enable_starttls_auto: true
  }

Step 4 設定寄件者

假設我們希望寄件者是我們服務的 email,就可以到 devise 中做設定

# config/initializers/devise.rb

config.mailer_sender = '<ning@example.com>' 

Step 5 設定信件內容

如果沒有自訂信件內容,就會以 devise 預設的內容為主,因為是註冊驗證信,所以我們會先把 mailer 的 view 做出來,再去修改內容

用指令將 devise 的 view 產生

rails g devise:views

到 view 中更改內容

# views/devise/mailer/confirmation_instructions.html.erb

<p>哈囉 <%= @email %>!</p>

<p>請點選下列連結開通帳號:</p>

<p><%= link_to 'Confirm my account', confirmation_url(@resource, confirmation_token: @token) %></p>

當我們註冊,應該就會收到信囉


上一篇
Day 01 一切從會員開始
下一篇
Day 03 用一塊一塊的積木堆積成一個網站
系列文
用 Rails 打造你的電商網站30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言