<Python>Djangoプロジェクトにユーザ認証を追加する

Python

“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
  1. 'django.contrib.sites':
    この行は、Django のサイトフレームワークを有効にします。サイトフレームワークは、複数のサイトを管理するための機能を提供し、Django プロジェクトが異なるドメイン名や URL 構成で動作する場合に役立ちます。
  2. 'allauth':
    この行は、django-allauth パッケージのコア機能を有効にします。django-allauth は、Django プロジェクトに認証機能を追加するためのパッケージで、ユーザー登録、ログイン、ログアウト、パスワードリセットなどの機能を提供します。
  3. 'allauth.account':
    この行は、django-allauth のアカウント管理機能を有効にします。これにより、ユーザーがアカウントを作成し、管理するための機能が提供されます。具体的には、ユーザー登録、ログイン、パスワード変更、パスワードリセットなどの機能が含まれます。
  4. 'allauth.socialaccount':
    この行は、django-allauth のソーシャルアカウント管理機能を有効にします。これにより、ユーザーがソーシャルメディアアカウント(例えば、Google、Facebook、Twitter など)を使用してログインできるようになります。ソーシャルアカウントの連携や管理が簡単に行えるようになります。
  5. '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が適用されていないため見た目は質素です。

札幌在住エンジニア。JavaやPHPやWordPressを中心とした記事が中心です。

【SE歴】四半世紀以上
【Backend】php / java(spring) / c# / AdobeFlex / c++ / VB / cobol
【Frontend】 vue.js / jquery他 / javascript / html / css
【DB】oracle / mysql / mariadb / sqlite
【infrastructure】aws / oracle / gcp
【license】aws(saa-c03) / oracle master / XML Master / Sun Certified Programmer for the Java 2 Platform 1.4

Nobelをフォローする
Python
Nobelをフォローする

コメント

タイトルとURLをコピーしました