SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Railsの新機能を知ろう!

より強化されたRails 8.0の新機能──シンプルな認証機能とデプロイの簡略化

Railsの新機能を知ろう! 第3回

  • X ポスト
  • このエントリーをはてなブックマークに追加

シンプルな組み込みの認証機能(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コントローラーにて以下のように取り込まれます。

リスト:app/controllers/application_controller.rb
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 現在のセッションを破棄する。

次のページ
シンプルな組み込みの認証機能(2)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Railsの新機能を知ろう!連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 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本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20812 2025/02/04 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング