ユーザー認証と管理は、新しいプロジェクトを開始するときの基本的な機能です。これらのタスクは頻繁に繰り返されるため、プロセスを合理化し、開発者がプロジェクトの他の側面に集中できるようにするためのさまざまなパッケージが開発されています。そのようなパッケージの 1 つが Djoser です。これは、Django REST Framework (DRF) とシームレスに統合して、認証とユーザー管理を処理します。このガイドでは、電子メール機能とカスタム電子メール テンプレートの設定を含め、Djoser を使用して完全なユーザー認証システムを構築する手順を説明します。
プロジェクトのディレクトリを作成することから始めます:
mkdir userauth
希望の IDE で新しいディレクトリに移動し、仮想環境をセットアップしてアクティブ化します
python venv .venv source .venv/bin/activate
次に、必要なパッケージをインストールします。
pip install django djangorestframework djoser djangorestframework_simplejwt social-auth-app-django drf-yasg
注: social-auth-app-django などの一部の依存関係は、Djoser とともに自動的にインストールされる場合があります。その場合は、明示的な追加をスキップできます
インストールしたら、requirements.txt ファイルを生成して依存関係を追跡します。
pip freeze > requirements.txt
依存関係も含め、requirements.txt ファイルにリストされているインストール済みのパッケージがすべて表示されます。
Django プロジェクトを作成し、サーバーを実行します
django-admin startapp userauth .
これにより、django プロジェクトが作成されます。次に、プロジェクト内にアプリを作成する必要があります
python manage.py startapp accounts
プロジェクト ディレクトリには次のものが含まれているはずです:
.venv (仮想環境)
アカウント/ (認証アプリ)
userauth/ (メインプロジェクトフォルダー)
manage.py
requirements.txt
必要なパッケージとアプリを settings.py の INSTALLED_APPS セクションに追加します。
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # Third Party Apps 'rest_framework', 'djoser', 'rest_framework_simplejwt', 'drf_yasg', # Local Apps 'accounts', ]
settings.py を更新して、Django REST フレームワークと SimpleJWT の構成を含めます:
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', ), }
カスタム ユーザー モデルを作成しましょう
accounts フォルダーに managers.py ファイルを作成します
accounts/managers.py
from django.contrib.auth.models import BaseUserManager class CustomUserManager(BaseUserManager): def create_user(self, email, username, password=None, **extra_fields) -> None: if not username: raise ValueError("Username is required") if not email: raise ValueError("Email is required") email = self.normalize_email(email) user = self.model(email=email, username=username, **extra_fields) user.set_password(password) user.save() return user def create_superuser(self, email, username, password, **extra_fields): """ Create and save a SuperUser with the given email and password. """ extra_fields.setdefault("is_staff", True) extra_fields.setdefault("is_superuser", True) extra_fields.setdefault("is_active", True) if extra_fields.get("is_staff") is not True: raise ValueError("Superuser must have is_staff=True.") if extra_fields.get("is_superuser") is not True: raise ValueError("Superuser must have is_superuser=True.") return self.create_user(email, username, password, **extra_fields)
accounts/models.py
from django.db import models from django.contrib.auth.models import AbstractUser from accounts.managers import CustomUserManager class CustomUser(AbstractUser): username = None email = models.EmailField(unique=True) is_verified = models.BooleanField(default=False) USERNAME_FIELD = 'email' REQUIRED_FIELDS = [] objects = CustomUserManager() def __str__(self): return self.email
この行を settings.py ファイルに追加します
AUTH_USER_MODEL = 'accounts.CustomUser'
移行を進めてから、ローカル開発サーバーを実行できます
python manage.py makemigrations python manage.py migrate python manage.py runserver
この時点までは問題はないはずです。
Djoser が提供する URL を、Swagger for API ドキュメントとともにプロジェクトの URL パターンに含めます。
userauth/urls.py
from django.contrib import admin from django.urls import include, path from rest_framework import permissions from drf_yasg.views import get_schema_view from drf_yasg import openapi schema_view = get_schema_view( openapi.Info( title="User Accounts API", default_version="v1", description="REST implementation of Django authentication system using Djoser", contact=openapi.Contact(email="contact@snippets.local"), license=openapi.License(name="BSD License"), ), public=True, permission_classes=(permissions.AllowAny,), ) urlpatterns = [ path('admin/', admin.site.urls), path('api/docs', schema_view.with_ui("swagger", cache_timeout=0), name="swagger-ui"), path('api/', include('djoser.urls')), path('api/', include('djoser.urls.jwt')) ]
ブラウザで http://127.0.0.1:8000/api/docs/ にアクセスして、API ドキュメントを表示します。
Djoser 用に構成できるすべての設定は、ここで Djoser の設定にあります
userauth/settings.py
mkdir userauth
ここでは、ユーザーにアクティベーション電子メールを受信するよう要求しています。アクティベーション URL は、ユーザーがクリックするために電子メールに送信されるリンクです。トークンと uid を抽出し、それらを本文として含む post リクエストをプロジェクトのアクティベーション ルートに送信する必要があります
最後に、メール送信を設定する必要があります。メール送信にはmailtrapを使用します。電子メールをコンソールに送信するか、選択した電子メール サービスに送信するかを選択できます。
コンソールに電子メールを送信するため
python venv .venv source .venv/bin/activate
外部メールサービスの利用
pip install django djangorestframework djoser djangorestframework_simplejwt social-auth-app-django drf-yasg
プレースホルダーを正しい認証情報に置き換えます
これをテストするために、postman を使用してテストします。
新しいユーザーの作成
その後、アクティベーションメールがユーザーに送信されます
メールテンプレートを少しカスタマイズしてみましょう
accounts ディレクトリにテンプレート フォルダーを作成し、次に電子メール フォルダーを作成し、そこにテンプレート フォルダーを作成します
アカウント/テンプレート/メール/activation_email.py
djoser
に付属するデフォルトのメールをカスタマイズします。
pip freeze > requirements.txt
テンプレート内のサイト名をカスタマイズするには、この行を djoser 設定に追加します
django-admin startapp userauth .
メール テンプレートは次のようになります
この記事の最後の部分では、電子メールの検証に取り組みます。
まず、accounts/views.py のアクティベーション ビューをカスタマイズします:
accounts/views.py
python manage.py startapp accounts
djoser のアクティベーション ビューを拡張してカスタマイズし、ユーザー モデルの is_verified フィールドを true に設定します
accounts/urls.py
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # Third Party Apps 'rest_framework', 'djoser', 'rest_framework_simplejwt', 'drf_yasg', # Local Apps 'accounts', ]
プロジェクト レベルの URL ファイル
userauth/urls.py
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', ), }
これをテストするには、新しいテスト ユーザーを作成し、電子メールに送信されたアクティベーション URL をクリックします。
URL がプロジェクトに存在しないため、このページにアクセスできます
URL から UID とトークンを抽出し、accounts/urls.py ファイルで定義したアクティベーション ルートにポスト リクエストを作成します
スクリーンショットから、私のルートは ;
mkdir userauth
UID は MTY です
トークンは cil456-aaf8331efb885f0b4412f35ce544648c
パラメータを使用して、アクティブ化エンドポイントへのポストリクエストを行う
これで、Djoser を使用したユーザー認証を設定するチュートリアルは終了です。これで、電子メールによるアクティベーションとカスタマイズ可能なテンプレートを備えた機能的な認証システムが完成しました。このシリーズの第 2 部では、ユーザーが Google、Facebook、GitHub などのサードパーティ サービスを使用してサインアップおよびログインできるようにするソーシャル認証について説明します。続報をお楽しみに!
ご質問やフィードバックがございましたら、お気軽にコメントを残してください。
以上がDjango、Djoser、および JWT を使用したユーザー認証のステップバイステップ ガイド: パート Iの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。