ユーザー認証機能の定番deviseの概要
さて、連載第1回は、前半/後半の2回にわたり、Rails開発においてユーザー認証機能を実装するにあたり定番と言えるgemであるdeviseを紹介します。deviseはあまりにも有名で、Railsアプリ開発者であればその名前を知らない人はほとんどいないのではないでしょうか。
ここからは、deviseに関する基本的な知識について確認します。
基本的な設計思想
deviseは、RailsのMVCに最適化されたユーザー認証に関する基本的な機能を提供しています。認証ロジックはWardenというgemによって提供されています。また、deviseはRails enginesとして提供されているため、その機能を別のRailsアプリのように取り込むことができます。
Wardenとは
先ほども触れた通り、WardenとはRackアプリケーションにユーザー認証機能を提供するgemです。Wardenはユーザー認証にセッションを使用します。与えられたユーザーID/パスワードなどを照合して、正しければユーザー情報を参照でき、不正であればエラー時の振る舞いなどを定義することができます。
詳細についてはWardenのWikiを参照してください。
Rails enginesとは
Rails enginesは、簡単に言ってしまえばRailsアプリのMVCをgemとしてそのまま別のRailsアプリに取り込むことができる仕組みのことです。deviseはRails enginesの代表的な実装例です。deviseの他にも代表的なgemとしてRailsAdminがあります。RailsAdminはRailsプロジェクトに効率的に管理画面を実装するためのgemです。
詳細については先ほど紹介したRailsガイドの解説記事を参照してください。
deviseの機能
deviseには、以下の通り10個の機能がモジュールとして用意されています。
モジュール | 機能 | デフォルト |
---|---|---|
Database Authenticatable | ユーザー情報格納先にDBを用いる | 有効 |
Registerable | ユーザーを登録・編集・削除する | 有効 |
Recoverable | パスワードをリセットする | 有効 |
Rememberable | cookieにログイン情報を保存する | 有効 |
Trackable | ログイン時の情報を保存する | 有効 |
Validatable | メールアドレス/パスワードのバリデーション | 有効 |
Confirmable | 登録されたemailにメール送信する | 無効 |
Lockable | ログインを一定回数失敗したらロックする | 無効 |
Timeoutable | 一定期間でタイムアウトさせる | 無効 |
Omniauthable | SNS認証用gemのOmniAuthと連携する | 無効 |
表の通り、デフォルトでは6つのモジュールが有効となっています。実装したい機能に合わせてモジュールを有効化して使用します。モジュールの有効化についてはこの後、実際にdeviseの機能を使う手順の中で紹介します。