Liz's Blog

GemGem大亂鬥#4:Devise 重設密碼設定

| Comments

先前有討論過不同版本間Devise Strong Parameter設定的差異,這次來記錄一下,如何設定Devise重設密碼的過程。

之前完成專案網站【嘉鼎資本投資事業投資術】後,疏忽沒去檢查到reset password重設密碼要自己設定,所以造成一些用戶忘記密碼就無法登入了。參考了Devise GithubSetting Up Mailer Using Devise For Forgot Password。作法如下:

1.

Gemfile
gem "devise"

2.終端機:bundle install

3.終端機:rails generate devise:install

4.在Development的環境中,為Devise mailer設定一個預設的網址(default URL options)

config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

5.建立Devise的MODEL
終端機:rails generate devise MODEL

6.終端機:rake db:migrate

7.重啟程式。

8.參考文章使用的是Rails 4 & Devise 3,我自己環境設定是Rails 4.2.2 & Devise 4。
接著要設定當寄信發生錯誤時,會產生例外的情形,打開以下檔案,加入這行。

config/environments/development.rb
config.action_mailer.raise_delivery_errors = true

9.在相同檔案中,設定本地環境參數。這樣一來,可以在開源軟體中避免透露自己的個資。

config/environments/development.rb
config.action_mailer.delivery_method = :smtp

config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",
port: 587,
domain: ENV["GMAIL_DOMAIN"],
authentication: "plain",
enable_starttls_auto: true,
user_name: ENV["GMAIL_USERNAME"],
password: ENV["GMAIL_PASSWORD"]
}

10.設定Production的環境參數。將yoursite.herokuapp.com替換成自己的網址。

config/environments/production.rb
config.action_mailer.default_url_options = { :host => 'yoursite.herokuapp.com' }
Rails.application.routes.default_url_options[:host] = 'yoursite.herokuapp.com'

config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = false
config.action_mailer.default :charset => "utf-8"

config.action_mailer.smtp_settings = {
address: "smtp.gmail.com",
port: 587,
domain: ENV["GMAIL_DOMAIN"],
authentication: "plain",
enable_starttls_auto: true,
user_name: ENV["GMAIL_USERNAME"],
password: ENV["GMAIL_PASSWORD"]
}

11.設定本地環境參數,development&production都可用到。
在根目錄下建立一個新檔案.env,避免讓其他人看到裡面的重要資訊。記得將裡面的帳密改成自己的。

.env
GMAIL_DOMAIN=gmail.com
GMAIL_USERNAME=support@yoururl.com
GMAIL_PASSWORD=password12345

12.使用Heroku建議的gem Foreman來測試是否成功。

Gemfile
group :development, :test do
  gem 'foreman'
end

13.終端機:bundle install

14.根目錄下新建立Procfile檔案,用來告訴程式哪個應該跑那個檔案。

Profile
web: bundle exec rails s

15.務必要更新.gitignore檔案,不然個資都被看光光了。

.gitignore
.env
Procfile

16.將本地參數加到Heroku。記得換成自己的帳密。
終端機:heroku config:add GMAIL_PASSWORD=password12345 GMAIL_USERNAME=support@yoururl.com GMAIL_DOMAIN=gmail.com

17.在本地端利用foreman測試mailer是否成功。
終端機:foreman start

18.測試後,如何發現以下問題,特別像是gmail要求較高層次的安全機制等,可參考這篇來設定應用程式密碼。得到密碼後,記得要將.env及Heroku中的密碼修改掉喔!

【延伸閱讀】

  1. GemGem大亂鬥#1:Bootstrap
  2. GemGem大亂鬥#2:Devise 會員登入系統
  3. GemGem大亂鬥#3:googlecharts 簡易圖表工具
  4. GemGem大亂鬥#5:OpenSSL Errors
  5. GemGem大亂鬥#6:deprecation warnings with sprockets 3.7.0

Comments

comments powered by Disqus