Railsのパスワード再発行を完全解説!Devise recoverableとメールテンプレ・トークン失効まで初心者向けに説明
Rails 認証 Devise パスワード再発行 recoverable メール トークン 有効期限 初心者
生徒
「Railsでログイン用のパスワードを忘れたときって、どうやって再設定するんですか?」
先生
「RailsではDeviseという認証機能を使うと、メールでパスワードを再発行できます。」
生徒
「メールが届いて、リンクを押す仕組みですよね?」
先生
「そうです。その仕組みをrecoverableという機能で実現しています。」
1. RailsとDeviseによる認証の基本
Railsは、Webアプリケーションを効率よく作るためのフレームワークです。 その中で認証とは、「この人は誰か」を確認する仕組みのことを指します。 ログインやログアウト、パスワード管理が代表例です。
DeviseはRailsでよく使われる認証ライブラリで、ログイン機能やメール確認、 パスワード再発行などをまとめて提供します。 初心者の方は「認証機能をまとめて用意してくれる便利な道具箱」 と考えるとわかりやすいです。
2. recoverableとは何をする機能か
recoverableはDeviseの機能の一つで、 「パスワードを忘れたときに再設定できる仕組み」を担当します。
具体的には、登録済みのメールアドレス宛に 一度だけ使えるリンクを送り、 そのリンクから新しいパスワードを設定します。 これは、合鍵を郵送するのではなく、 一回限りの入館証を渡すイメージです。
3. recoverableで使われるデータベース項目
recoverableを使うと、ユーザーテーブルには パスワード再発行用の情報が保存されます。
## Devise Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
reset_password_tokenは再発行リンクの鍵、 reset_password_sent_atはメールを送った時刻です。 この2つを使って「正しいリンクか」「期限切れか」を判断します。
4. パスワード再発行の流れを全体で理解する
パスワード再発行の流れは、次のようになります。
1. メールアドレスを入力
2. 再発行用メールが届く
3. メール内リンクをクリック
4. 新しいパスワードを設定
この流れは、ネットバンキングや通販サイトと同じ仕組みです。 RailsとDeviseは、この一連の流れを自動で用意してくれます。
5. メールテンプレートの役割と内容
再発行メールの文章は、テンプレートとして用意されています。 テンプレートとは「ひな形」のことです。
<p>こんにちは <%= @resource.email %> さん</p>
<p>以下のリンクからパスワードを再設定できます。</p>
<p><%= link_to 'パスワードを変更する',
edit_password_url(@resource, reset_password_token: @token) %></p>
この中で重要なのがreset_password_tokenです。 この値が正しいときだけ、再設定画面が表示されます。
6. トークンの有効期限と失効の仕組み
再発行リンクは、ずっと使えるわけではありません。 一定時間が過ぎると無効になります。
config.reset_password_within = 6.hours
これは「6時間以内に使ってください」という設定です。 時間切れになると、新しいリンクを再度発行する必要があります。 安全のために必ず制限が設けられています。
7. パスワード再設定画面で行われる処理
リンクをクリックすると、パスワード入力画面が表示されます。 入力された内容はDeviseによって検証されます。
if user.reset_password(new_password, new_password_confirmation)
# パスワード更新成功
end
確認用パスワードと一致しない場合や、 期限切れの場合はエラーになります。
8. 初心者がつまずきやすいポイント
初心者がよく困るのは「メールが届かない」「リンクが無効」といった点です。
多くの場合、メール設定が未完了だったり、 有効期限が切れていたりします。 まずは仕組みを理解し、 どの段階で止まっているかを確認することが大切です。