シンプルな組み込みの認証機能(1)
Rails 8.0では、シンプルな認証機能がコードジェネレータによって提供されるようになったので、アプリケーションに認証機能を組み込むハードルが下がりました。
メールアドレスとパスワードによる認証をサポートし、認証とセッション管理のためのメソッドの提供と、セッション管理とパスワードリセットのためのコントローラーを備えます。新規ユーザーを登録するサインアップ機能こそ持ちませんが、あらかじめユーザー情報を用意しておけば、少ない手間で認証の必要なアプリを構築できます。
作成されるモデルとコントローラー
コードジェネレータの呼び出しは、rails generate authenticationコマンドです。このコマンドによって、認証機能に必要なテーブルやモデル、コントローラー、ビューが自動生成されます。以下は、authappアプリを作成し、rails generate authenticationコマンドを実行しています。
% rails new authapp % cd authapp % rails generate authentication
作成されるモデルを見ていきます。以下の表に挙げるモデルが作成されます。
| モデル | 概要 |
|---|---|
| User | ユーザーアカウントを格納する。usersテーブルはuniqueインデックス付きのemail_addressフィールドと、ハッシュ化したパスワードを保管するためのpassword_digestフィールドを持つ。 |
| Session | セッション管理データを格納する。sessionsテーブルは、usersテーブルへの外部キーとhas_secure_tokenで生成される一意のtokenフィールド、ユーザーのデバイスやネットワークの詳細情報を記録するためのip_addressフィールドとuser_agentフィールドを持つ。 |
| Current | リクエスト単位でステートを管理し、user属性(Userモデル)で現在のユーザーの情報へのアクセスを可能にする。 |
また、以下のマイグレーションが作成されます。
- create_usersマイグレーション:usersテーブルを作成する。
- create_sessionsマイグレーション:sessionsテーブルを作成する。
認証機能の利用にはbcrypt Gemが必要になりますが、既定で指定されているので追加は不要です。
以下の表に挙げるコントローラーが作成されます。
| コントローラー | 概要 | アクション |
|---|---|---|
| SessionsController | ユーザーのセッション管理のアクションを処理する。 | new(サインイン)、create(セッション作成)、destroy(セッション破棄) |
| PasswordController | パスワードリセットのアクションを処理する。 | new(メール送信フォーム)、create(メール送信)、edit(パスワード変更フォーム)、update(パスワード変更) |
Authentication concern
認証機能の中核となるメソッドは、Authenticationというconcernで実装されています。Applicationコントローラーにて以下のように取り込まれます。
class ApplicationController < ActionController::Base include Authentication # concerns/authentication.rb allow_browser versions: :modern end
ApplicationControllerで取り込まれることで、全てのコントローラーのアクションが認証の対象になります。トップページなど、認証が不要なページでは後述するallow_unauthenticated_accessメソッドをコントローラークラスの冒頭に記述します。
[NOTE]concern
concernとは、Railsアプリ内で同じロジックを複数の場所で再利用するための仕組みです。これにより、コードの整理、管理、保守が容易になります。認証機能を必要とするアクションは一般に複数になりますが、それぞれに実装するのではなくcencernsによって共通化された機能を利用するだけになり、利便性が向上します。ActiveSupport::Concernクラスを拡張して実装されます。
Authenticationには、認証機能で利用できるメソッドが定義されています。主なものを以下の表に挙げます。
| メソッド | 概要 |
|---|---|
| require_authentication | before_action用のコールバック。認証が必要なことを示し、セッションを読み込む。必要であればログインページへ誘導する。 |
| resume_session | セッションを復元する。 |
| authenticated? | 現在のユーザーにアクティブなセッションがあるか返す。 |
| allow_unauthenticated_access | 指定するアクションをrequire_authenticationの対象から外す。 |
| after_authentication_url | 認証後のリダイレクト先URLを返す。 |
| start_new_session_for(user) | 指定ユーザーの現在のセッションを開始する。 |
| terminate_session | 現在のセッションを破棄する。 |
この記事は参考になりましたか?
- Railsの新機能を知ろう!連載記事一覧
-
- より強化されたRails 8.0の新機能――SQLite統合によるSolid Adapte...
- より強化されたRails 8.0の新機能──シンプルな認証機能とデプロイの簡略化
- Rails 7.1の新機能──非同期キュー、MySQLアダプター「Trilogy」やJav...
- この記事の著者
-
WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。出版社を経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
