環境
MacOS
Rails 6.1.6
Ruby 3.1.2
前提
Deviseでログイン、ログアウトの実装を完了している。
注意
同じような検索をかけると、sorceryという謎のものが出てくるが、Deviseとは別の認証モジュールなので、一緒には使えない。はず。
実装イメージ
ログイン画面 にforgot password?
この案内リンクからメール送信画面へ
letter_openerで送信
/letter_openerで受信確認
再設定リンク踏んで、パスワード再設定
再設定したらログイン画面へ遷移し、成功メッセージを確認
手順
forgot password?の実装
<%= link_to "forgot password?", new_user_password_path %>
リンク先は $rails routes
で確認
view/devise/passwords/new.html.erb
に飛びたいので、
devise/passwords#new
を探す
先頭の文字列に_pathを付与して、リンク先完成
new_user_password_path
メール送受信の実装
ジェム letter_openerを利用。
module インストール
gem 'letter_opener_web', '~> 2.0'
$ bundle
:recoverable
が含まれていること確認
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
t.boolean :allow_password_change, :default => false
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
送受信方法と送信先の設定
config.action_mailer.delivery_method = :letter_opener_web
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
ブラウザでメールの送信結果を確認できるように設定
mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development?
メール受信確認
/letter_opener
気になるがやらないこと
・Vagrant machine とか Docker container からアプリケーションを立ち上げている時
この場合変なメッセージが出てくるのを回避したりするために、letter_opener_webを使うといいらしい。
・メール本文の変更
新しくmailerコントローラ作っていろいろやるらしい
$ bundle exec rails g mailer new_user
参考サイト
あとがき
やはり、見返さないとしても、こうやって記録を残しておくことは、頭が整理されていいですね。