1
0

More than 1 year has passed since last update.

Deviseでletter_openerを用いたパスワードリセット

Posted at

環境

MacOS
Rails 6.1.6
Ruby 3.1.2

前提

Deviseでログイン、ログアウトの実装を完了している。

注意

同じような検索をかけると、sorceryという謎のものが出てくるが、Deviseとは別の認証モジュールなので、一緒には使えない。はず。

実装イメージ

ログイン画面 にforgot password?
この案内リンクからメール送信画面へ
letter_openerで送信
/letter_openerで受信確認
再設定リンク踏んで、パスワード再設定
再設定したらログイン画面へ遷移し、成功メッセージを確認

手順

forgot password?の実装

view/divise/session/new.html.erb
<%= link_to "forgot password?", new_user_password_path %>

リンク先は $rails routesで確認
view/devise/passwords/new.html.erbに飛びたいので、
devise/passwords#newを探す

image.png

先頭の文字列に_pathを付与して、リンク先完成
new_user_password_path

Deviseではパスワード再設定画面は既に用意されている。
image.png

メール送受信の実装

ジェム letter_openerを利用。

module インストール

Gemfile.
gem 'letter_opener_web', '~> 2.0'
$ bundle

:recoverableが含まれていること確認

db/migrate/devise_create_users.rb
## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at
      t.boolean  :allow_password_change, :default => false
models/user.rb
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

送受信方法と送信先の設定

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

ブラウザでメールの送信結果を確認できるように設定

config/routes.rb
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
参考サイト

あとがき

やはり、見返さないとしても、こうやって記録を残しておくことは、頭が整理されていいですね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0