はじめに
Deviseは、Railsアプリケーションで簡単に認証機能を導入できる強力なライブラリです。しかし、時にはサインアップ機能を制限したり、特定の認証機能をカスタマイズしたい場合があります。
今回の記事では、Deviseの認証機能を制限する方法を、初心者向けに解説します。サインアップ機能の廃止や特定の認証機能の無効化、逆に新しい機能の追加など、実際のアプリケーションでよく使われる設定について学んでいきましょう。
Deviseの導入方法について
Deviseの導入方法に関しては、別の記事で詳しく解説しています。まだDeviseを導入していない場合や、セットアップが完了していない方は、こちらの記事を参考にしてください。

Deviseの認証機能を制限する方法
Deviseの認証機能を制限したり、追加の機能を有効にするには、Userモデルの設定を変更します。
Deviseモジュールの設定
Deviseでは、以下のようにUserモデルで使う認証機能をモジュールとして定義します。app/models/user.rb
を編集して、必要なモジュールだけを有効にしたり、不要な機能を無効にできます。
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable, :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
end
デフォルトのDeviseモジュールの説明
Deviseには、デフォルトでいくつかのモジュールが有効になっています。以下は、デフォルトで有効なモジュールとその機能です。
モジュール | 機能 |
---|---|
database_authenticatable | パスワードの暗号化と認証機能 |
registerable | サインアップ機能 |
recoverable | パスワードリセット機能 |
rememberable | クッキーにログイン情報を保持 |
validatable | バリデーション機能 |
例えば、サインアップ機能が不要な場合は、registerable
モジュールを削除すれば、ユーザーが新規登録できなくなります。
追加できるDeviseモジュール
Deviseには、他にも追加可能なモジュールがいくつか用意されています。これらを有効にすることで、アプリケーションの認証機能をさらに強化することができます。
モジュール | 機能 |
---|---|
confirmable | メール認証機能 |
lockable | 一定回数のログイン失敗でアカウントロック |
timeoutable | セッションのタイムアウト |
trackable | ユーザーのサインイン履歴をトラッキング |
omniauthable | Googleなどの外部認証プロバイダー利用 |
実装例:サインアップ機能を廃止する
サインアップ機能を無効にする
サインアップ機能を廃止したい場合、registerable
モジュールを削除します。以下のようにapp/models/user.rb
を編集します。
class User < ApplicationRecord
devise :database_authenticatable, :recoverable, :rememberable, :validatable
end
これにより、ユーザーはアプリケーション上で新しいアカウントを作成できなくなります。
ビューやコントローラーのカスタマイズ
サインアップ機能を無効にした場合、ビューやルーティングも調整する必要があります。例えば、config/routes.rb
でサインアップに関連するルートを削除します。
devise_for :users, skip: [:registrations]
さらに、サインアップページのリンクなどがアプリに残っている場合は、ビューから削除しましょう。
実装例:外部認証(Googleアカウントなど)を追加する
omniauthableモジュールを利用すると、GoogleやFacebookなどの外部認証を追加することができます。外部プロバイダーのAPI設定や、Gemの追加が必要になりますが、ここでは基本的なセットアップ方法を紹介します。
omniauthableモジュールを有効にする
omniauthable
モジュールを有効にするために、Userモデルを以下のように編集します。
class User < ApplicationRecord
devise :database_authenticatable, :recoverable, :rememberable, :validatable, :omniauthable
end
omniauth設定の追加
Gemfileに以下を追加して、omniauth
をインストールします。
gem 'omniauth-google-oauth2'
次に、Google APIコンソールでOAuthクライアントIDを取得し、config/initializers/devise.rb
に設定します。
Devise.setup do |config|
config.omniauth :google_oauth2, "GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET", { }
end
これで、Googleアカウントを使ったログインが可能になります。ビューやコントローラーを調整して、Google認証のボタンを設置すれば、簡単に外部認証が追加できます。
Deviseモジュールのカスタマイズ
Deviseのモジュールは、アプリケーションの要件に応じて柔軟にカスタマイズできます。たとえば、次のような機能を追加・削除することが可能です。
- ユーザー登録時のメール確認(confirmable):新規ユーザーに確認メールを送信し、メールアドレスの確認ができるまでアカウントを有効にしない。
- 一定回数のログイン失敗でアカウントロック(lockable):セキュリティを強化するために、一定回数のログイン失敗後にアカウントを一時ロック。
- セッションのタイムアウト設定(timeoutable):一定時間アクティビティがない場合に自動的にサインアウト。
まとめ
今回の記事では、RailsアプリケーションにおけるDeviseの認証機能の制限方法について学びました。Deviseは非常に柔軟で、不要な機能を無効にしたり、必要な機能を追加したりすることで、アプリケーションに合わせた認証システムを簡単に構築できます。
この記事のポイント
- Deviseモジュールの設定で認証機能を制限・拡張する。
- サインアップ機能を無効化するためには
registerable
モジュールを削除。 - omniauthableモジュールでGoogleアカウントなどの外部認証を追加可能。
- ビューやルーティングのカスタマイズも必要に応じて行う。
今回の内容が参考になったら幸いです!
コメント