使用環境
ruby:3.2.2
rails:7.0.7
Docker
Gmail
render
今回のデプロイ先はrenderを使用しました。
メールはGmailを設定します。
本番環境でパスワードリセットする挙動
1.ユーザーがパスワードの再設定をリクエストすると、ユーザーが送信したメールアドレスをキーにしてデータベースからユーザーを見つける
2.該当のメールアドレスがデータベースにある場合は、再設定用トークンとそれに対応する再設定ダイジェストを生成する
3.再設定用ダイジェストはデータベースに保存しておき、再設定用トークンはメールアドレスと一緒に、ユーザーに送信する有効化用メールのリンクに仕込んでおく
4.ユーザーがメールのリンクをクリックしたら、メールアドレスをキーとしてユーザーを探し、データベース内に保存しておいた再設定用ダイジェストと比較する (トークンを認証する)
5.認証に成功したら、パスワード変更用のフォームをユーザーに表示する
ここまでは前回実装済みです。今回は本番環境の設定を行っていきます。
Gmail.comを使った実装手順
①.Googleでアプリパスワードを取得
②.環境設定ファイルに通信設定を記述
③.renderの設定
アプリパスワード取得
まず、アプリで使用するGoogleアカウントを作成します。
2段階認証が設定されていない場合は、まず2段階認証をオンにしてください。
設定が有効になったら、2段階認証プロセスのページをもう一度開き一番下までスクロールするとアプリパスワードがあります。
このパスワードを覚えておく必要はないので、とおっしゃっていますが嘘です絶対にこのページで控えておいてください。
Railsの環境設定
【開発環境の設定変更】
開発環境でのメールの送信先を変更します。
config.action_mailer.default_url_options = Settings.default_url_options.to_h
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: '***.onrender.com',
user_name: ENV['GMAIL_USERNAME'],
password: ENV['GMAIL_PASSWORD'],
authentication: 'plain',
enable_starttls_auto: true
}
64行目に config.action_mailer.perform_caching = false
という行があるので、その下に記述すと分かりやすいです。
【解説】
config.action_mailer.delivery_method = :letter_opener_web
Railsアプリケーションでメールを送信する際に使用する配送方法(delivery method)を設定しています。
config.action_mailer.raise_delivery_errors = true
この設定は、メールの配信中にエラーが発生した場合に、例外を発生させるかどうかを設定します。trueに設定することで、メール送信時のエラーが発生した際にアプリケーションが例外を投げ、これによって開発者は問題を認識しやすくなります。
config.action_mailer.delivery_method = :smtp
メールの送信方法をSMTP(Simple Mail Transfer Protocol)に設定しています。SMTPはインターネットでメールを転送するための標準プロトコルです。
config.action_mailer.smtp_settings = {}
smtp_settingsハッシュでは、SMTPサーバーの詳細設定を行っています。これらの設定によりRailsはメールを送信するためにGmailのSMTPサーバーを利用することができます。
説明 | |
---|---|
address: | SMTPサーバーのアドレスです。Gmailの場合はsmtp.gmail.comを使用します。 |
port: | SMTPサーバーのポート番号です。587はメール送信に一般的に使われるTLS(Transport Layer Security)を使用するポートです。 |
domain: | メールを送信する際に使用されるドメイン名です。ここでは例として***.onrender.comが設定されています。 |
user_name: password: | 環境変数を通して設定されるGmailのユーザー名とパスワードです。 |
authentication: | SMTPの認証タイプです。ここでは'plain'が使われていますが、他にも'login'や'cram_md5'などがあります。 |
enable_starttls_auto: | trueに設定することで、メール送信のセキュリティを強化するためにTLSを使用することをSMTPサーバーに対して指示します。 |
.envファイルの設定
今回、少人数のチーム開発だったので、credentials.yml.encで環境変数を管理すると、変更の際毎回EDITORを開くのがめんどくさくて.envで作成しました。
【gemのインストール】
.env
ファイルをrailsで扱うためには、`gem 'dotenv-rails'が必要です。
gem 'dotenv-rails'
bundle install
.env
ファイルはGitHubに上げないよう、.gitignore
に追記します。
.env
中身を編集していきます。
GMAIL_USERNAME=***********@gmail.com #アプリキーを設定したメールアドレス
GMAIL_PASSWORD=ltxc **** **** scrd #アプリキー
USERNAMEにはアプリキーを設定したメールアドレスを記述します。このアドレスがメールの送信元になります。
PASSWORDに先ほどメモしたアプリキーを設定します。
user_name: ENV['GMAIL_USERNAME'],
password: ENV['GMAIL_PASSWORD'],
この形で変数を呼び出せます。
renderの設定
最後にrenderで環境変数を読み込めるようにします。
renderの設定したいアプリをDashboardから選び、EnvironmentのSecretFilesを設定します。
Filenameを.env
に設定します。
次にContentsをクリックすると開かれるファイルに、Railsの.env
と同じ設定を記述します。
最後にSave Changesを押して内容を保存しましょう。(忘れると保存されません😂)
関連記事
参考資料