✉️
Deviseのパスワードリセット機能を本番環境に設定する
行いたいこと
-
本番環境
でDeviseのパスワードリセット機能を使い、指定されたメールアドレスに
パスワードリセットのメール
を送信する。
前提として...
- 開発環境でDeviseによるパスワードリセット機能の実装が済んでいる。
- アプリのデプロイ先は
Heroku
です。
実装内容
-
Google
でアプリパスワード
を生成する。 - 生成した
アプリパスワード
を使いSMTP
を設定する。 - Heroku側で
環境変数
を設定する。
Googleでアプリパスワードの生成
・今回はアプリ用に新規でGmailを作成しました。まずGoogleのアカウントにログインします。
アプリパスワードの生成
アプリパスワードを使い SMTP を設定する
・それぞれ追記と修正をする
.env(隠しファイル)
・他のファイルで直接メールアドレス
とパスワード
の記載をしないように隠しファイル
に記載する。
・他のファイルではGMAIL_USERNAME
、GMAIL_PASSWORD
と記載する
GMAIL_USERNAME = メールアドレス
GMAIL_PASSWORD = ・・・・・・・(空欄は開けず詰めて記載)
.gitignore(.envファイルの読み込み)
/.env
config/environments/production.rb
host = 'デプロイ先のアプリのURL'
config.action_mailer.default_url_options = { protocol: 'https', host: host }
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
port: 587,
domain: 'デプロイ先のアプリのURLのドメイン',
address: "smtp.gmail.com",
user_name: ENV["GMAIL_USERNAME"] ,
password: ENV["GMAIL_PASSWORD"] ,
authentication: :plain,
enable_starttls_auto: true
}
config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'localhost',
user_name: ENV['GMAIL_USERNAME'],
password: ENV['GMAIL_PASSWORD'],
authentication: 'plain',
enable_starttls_auto: true
}
config/initializers/devise.rb(差出人のメールアドレス)
config.mailer_sender = ENV['GMAIL_USERNAME']
Gemfile(環境変数の読み込み)
・.envファイル
に記載された環境変数を自動的に読み込み、Railsアプリケーション内で変数を利用できるようになる。
gem 'dotenv-rails'
Discussion