“django-allauth”でユーザ認証を構築
django-allauthは、Djangoフレームワーク向けの統合認証ソリューションで、ユーザー認証、登録、アカウント管理、そしてサードパーティ(ソーシャル)アカウント認証を包括的にサポートします。
事前に以下の記事で構築済みの前提となります。まだ未構築の方は先に構築を行ってください。
Dockerfile
Dockerfileに7行目のコマンドを追加します。
FROM python:3.9
ENV PYTHONUNBUFFERED=1
WORKDIR /webapp
COPY requirements.txt /webapp/
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
RUN pip install django-allauth
COPY . /webapp/
この7行目のコマンドは、pip
(Python のパッケージ管理ツール)を使用して django-allauth
パッケージをインストールします。django-allauth
は、Django プロジェクトに認証機能を追加するためのパッケージで、ソーシャルログイン(Google、Facebook など)やメール認証などの機能を簡単に統合することができます。
このコマンドが実行されると、django-allauth
パッケージとその依存関係がコンテナ内にインストールされ、Django プロジェクトでこれらの機能を利用できるようになります。これにより、認証機能を迅速に実装し、ユーザー管理を効率的に行うことが可能になります。
settings.py
8-11行目、21行目、23行目を追加します。23行目のSITE_IDも忘れずに追加してください。
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'allauth.account.middleware.AccountMiddleware',
]
SITE_ID = 1
'django.contrib.sites'
:
この行は、Django のサイトフレームワークを有効にします。サイトフレームワークは、複数のサイトを管理するための機能を提供し、Django プロジェクトが異なるドメイン名や URL 構成で動作する場合に役立ちます。'allauth'
:
この行は、django-allauth
パッケージのコア機能を有効にします。django-allauth
は、Django プロジェクトに認証機能を追加するためのパッケージで、ユーザー登録、ログイン、ログアウト、パスワードリセットなどの機能を提供します。'allauth.account'
:
この行は、django-allauth
のアカウント管理機能を有効にします。これにより、ユーザーがアカウントを作成し、管理するための機能が提供されます。具体的には、ユーザー登録、ログイン、パスワード変更、パスワードリセットなどの機能が含まれます。'allauth.socialaccount'
:
この行は、django-allauth
のソーシャルアカウント管理機能を有効にします。これにより、ユーザーがソーシャルメディアアカウント(例えば、Google、Facebook、Twitter など)を使用してログインできるようになります。ソーシャルアカウントの連携や管理が簡単に行えるようになります。'SITE_ID = 1'
:
Django のサイトフレームワークは、複数のサイトを管理するための機能を提供します。例えば、同じ Django プロジェクトで異なるドメイン名や URL 構成を持つ複数のウェブサイトを運営する場合に役立ちます。現在のサイトを識別するための一意の ID を指定します。この ID は、データベースのdjango_site
テーブルに対応しており、各サイトの情報がこのテーブルに保存されています。SITE_ID = 1
と設定することで、Django はdjango_site
テーブルの ID が 1 のサイトを現在のサイトとして認識します。この設定により、Django プロジェクトがどのサイトの設定を使用するかを明確に指定することができます。特に、django.contrib.sites
アプリケーションやdjango-allauth
のようなサイトフレームワークに依存するアプリケーションを使用する場合に重要です。
urls.py
2行目に「include」を追加し、6行目を追加します。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('allauth.urls')),
]
このコードは、accounts/
で始まる URL パスに対して、django-allauth
パッケージが提供する URL パターンをインクルード(取り込む)するための設定です。この設定により、accounts/
で始まる URL にアクセスすると、django-allauth
の認証機能に関連するビューが呼び出されます。例えば、accounts/login/
でログインページにアクセスしたり、accounts/signup/
でサインアップページにアクセスしたりすることができます。
ビルド&コンテナ起動
docker-compose build
docker-compose up -d
DBマイグレーション
django-allauthではDBが必要になります。コンテナが起動している状態でマイグレーションを実行しましょう。
docker-compose exec web python manage.py migrate
ブラウザで確認する
ブラウザで http://localhost:8000/accounts/login/ を開いて見ましょう。CSSが適用されていないため見た目は質素です。
コメント