カテゴリ: Rails 更新日: 2026/02/15

Railsのパスワード再発行を完全解説!Devise recoverableとメールテンプレ・トークン失効まで初心者向けに説明

パスワード再発行(recoverable):メールテンプレ/トークン失効まで徹底解説
パスワード再発行(recoverable):メールテンプレ/トークン失効まで徹底解説

Rails 認証 Devise パスワード再発行 recoverable メール トークン 有効期限 初心者

先生と生徒の会話形式で理解しよう

生徒

「Railsでログイン用のパスワードを忘れたときって、どうやって再設定するんですか?」

先生

「RailsではDeviseという認証機能を使うと、メールでパスワードを再発行できます。」

生徒

「メールが届いて、リンクを押す仕組みですよね?」

先生

「そうです。その仕組みをrecoverableという機能で実現しています。」

1. RailsとDeviseによる認証の基本

1. RailsとDeviseによる認証の基本
1. RailsとDeviseによる認証の基本

Railsは、Webアプリケーションを効率よく作るためのフレームワークです。 その中で認証とは、「この人は誰か」を確認する仕組みのことを指します。 ログインやログアウト、パスワード管理が代表例です。

DeviseはRailsでよく使われる認証ライブラリで、ログイン機能やメール確認、 パスワード再発行などをまとめて提供します。 初心者の方は「認証機能をまとめて用意してくれる便利な道具箱」 と考えるとわかりやすいです。

2. recoverableとは何をする機能か

2. recoverableとは何をする機能か
2. recoverableとは何をする機能か

recoverableはDeviseの機能の一つで、 「パスワードを忘れたときに再設定できる仕組み」を担当します。

具体的には、登録済みのメールアドレス宛に 一度だけ使えるリンクを送り、 そのリンクから新しいパスワードを設定します。 これは、合鍵を郵送するのではなく、 一回限りの入館証を渡すイメージです。

3. recoverableで使われるデータベース項目

3. recoverableで使われるデータベース項目
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. パスワード再発行の流れを全体で理解する

4. パスワード再発行の流れを全体で理解する
4. パスワード再発行の流れを全体で理解する

パスワード再発行の流れは、次のようになります。


1. メールアドレスを入力
2. 再発行用メールが届く
3. メール内リンクをクリック
4. 新しいパスワードを設定

この流れは、ネットバンキングや通販サイトと同じ仕組みです。 RailsとDeviseは、この一連の流れを自動で用意してくれます。

5. メールテンプレートの役割と内容

5. メールテンプレートの役割と内容
5. メールテンプレートの役割と内容

再発行メールの文章は、テンプレートとして用意されています。 テンプレートとは「ひな形」のことです。


<p>こんにちは <%= @resource.email %> さん</p>

<p>以下のリンクからパスワードを再設定できます。</p>

<p><%= link_to 'パスワードを変更する',
edit_password_url(@resource, reset_password_token: @token) %></p>

この中で重要なのがreset_password_tokenです。 この値が正しいときだけ、再設定画面が表示されます。

6. トークンの有効期限と失効の仕組み

6. トークンの有効期限と失効の仕組み
6. トークンの有効期限と失効の仕組み

再発行リンクは、ずっと使えるわけではありません。 一定時間が過ぎると無効になります。


config.reset_password_within = 6.hours

これは「6時間以内に使ってください」という設定です。 時間切れになると、新しいリンクを再度発行する必要があります。 安全のために必ず制限が設けられています。

7. パスワード再設定画面で行われる処理

7. パスワード再設定画面で行われる処理
7. パスワード再設定画面で行われる処理

リンクをクリックすると、パスワード入力画面が表示されます。 入力された内容はDeviseによって検証されます。


if user.reset_password(new_password, new_password_confirmation)
  # パスワード更新成功
end

確認用パスワードと一致しない場合や、 期限切れの場合はエラーになります。

8. 初心者がつまずきやすいポイント

8. 初心者がつまずきやすいポイント
8. 初心者がつまずきやすいポイント

初心者がよく困るのは「メールが届かない」「リンクが無効」といった点です。

多くの場合、メール設定が未完了だったり、 有効期限が切れていたりします。 まずは仕組みを理解し、 どの段階で止まっているかを確認することが大切です。

カテゴリの一覧へ
新着記事
New1
Ruby
“すべてはオブジェクト”を体感!初心者向けRubyのオブジェクト指向入門【irbで学ぶ】
New2
Ruby
Rubyの標準入出力を完全ガイド!puts・print・pの違いとデバッグ活用法
New3
Ruby
Gemとは?RubyGemsとBundlerを初心者向けに完全解説!依存関係管理も図解でわかりやすく理解
New4
Ruby
Rubyの文字エンコーディング入門!UTF-8・マジックコメント・外部/内部エンコーディングを完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
Rubyのreduceとinject入門!合計計算や集計を初心者向けに分かりやすく解説
No.2
Java&Spring記事人気No2
Ruby
Rubyの文字列エンコーディング完全ガイド!Encoding・force_encoding・encodeを初心者向け解説
No.3
Java&Spring記事人気No3
Ruby
Rubyの始め方ガイド:インストールから最初のHello Worldまで(Windows/Mac/Linux)
No.4
Java&Spring記事人気No4
データベース
PostgreSQLのWHERE句を徹底解説!初心者でもわかるSQLデータ抽出の基本
No.5
Java&Spring記事人気No5
Ruby
Rubyのfind/detect/find_indexを徹底解説!目的のデータを素早く探す方法
No.6
Java&Spring記事人気No6
Ruby
Rubyで比較演算子を完全解説!==・===・<=>・eql? の使い分け
No.7
Java&Spring記事人気No7
Ruby
Rubyのselect/reject/filterの使い方を完全解説!初心者向けの条件抽出レシピ
No.8
Java&Spring記事人気No8
データベース
PostgreSQLで順位付け!ROW_NUMBER関数の使い方を初心者向けに徹底解説