メール設定

メールを送信するための設定をします。

ローカルでメール内容を確認するときは、EMAIL_BACKENDdjango.core.mail.backends.console.EmailBackendに設定します。

本番環境用で実際のメールアドレスにメールを送るときは、EMAIL_BACKENDdjango.core.mail.backends.smtp.EmailBackendに設定します。

下記は Gmail 用の設定なので、それぞれに合わせて変更してください。

mysite/settings.py

# ローカル確認用
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

# 本番環境用
# EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'xxx@gmail.com'
EMAIL_HOST_PASSWORD = 'xxx'
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL = 'xxx@gmail.com'

REST Framework 設定

REST Framework の設定です。

API にアクセスするためには、認証が必要になります。

認証は JWT を使用します。

JWT

mysite/settings.py

REST_FRAMEWORK = {
    # 認証が必要
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
    # JWT認証
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ]
}

Simple JWT 設定

JWT 認証を構築するために、SimpleJWTライブラリを使用します。

SimpleJWTの設定は色々あるので、下記ドキュメントを参考にしてください。

https://django-rest-framework-simplejwt.readthedocs.io/en/latest/index.html

アクセストークンの期限は 1 時間でリフレッシュトークンの期限は 3 日としています。

認証タイプはJWTで、認証トークンは、Simple JWT のアクセストークンを指定します。

mysite/settings.py

from datetime import timedelta

SIMPLE_JWT = {
    # アクセストークン(1時間)
    'ACCESS_TOKEN_LIFETIME': timedelta(hours=1),
    # リフレッシュトークン(3日)
    'REFRESH_TOKEN_LIFETIME': timedelta(days=3),
    # 認証タイプ
    'AUTH_HEADER_TYPES': ('JWT', ),
    # 認証トークン
    'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken', )
}

Djoser 設定

Djoser ライブラリを使用すると、簡単にメール認証やパスワード変更、パスワードリセットなどすることができます。

それぞれのメールの内容も変更することができます。

Djoserの設定は色々あるので、下記ドキュメントを参考にしてください。

https://djoser.readthedocs.io/en/latest/index.html

mysite/settings.py

DJOSER = {
    # メールアドレスでログイン
    'LOGIN_FIELD': 'email',
    # アカウント本登録メール
    'SEND_ACTIVATION_EMAIL': True,
    # アカウント本登録完了メール
    'SEND_CONFIRMATION_EMAIL': True,
    # メールアドレス変更完了メール
    'USERNAME_CHANGED_EMAIL_CONFIRMATION': True,
    # パスワード変更完了メール
    'PASSWORD_CHANGED_EMAIL_CONFIRMATION': True,
    # アカウント登録時に確認用パスワード必須
    'USER_CREATE_PASSWORD_RETYPE': True,
    # メールアドレス変更時に確認用メールアドレス必須
    'SET_USERNAME_RETYPE': True,
    # パスワード変更時に確認用パスワード必須
    'SET_PASSWORD_RETYPE': True,
    # アカウント本登録用URL
    'ACTIVATION_URL': 'activate/{uid}/{token}',
    # メールアドレスリセット完了用URL
    'USERNAME_RESET_CONFIRM_URL': 'email/reset/confirm/{uid}/{token}',
    # パスワードリセット完了用URL
    'PASSWORD_RESET_CONFIRM_URL': 'password/reset/confirm/{uid}/{token}',
    # カスタムユーザー用シリアライザー
    'SERIALIZERS': {
        'user_create': 'accounts.serializers.UserSerializer',
        'user': 'accounts.serializers.UserSerializer',
        'current_user': 'accounts.serializers.UserSerializer',
    },
    'EMAIL': {
        # アカウント本登録
        'activation': 'accounts.email.ActivationEmail',
        # アカウント本登録完了
        'confirmation': 'accounts.email.ConfirmationEmail',
        # パスワードリセット
        'password_reset': 'accounts.email.PasswordResetEmail',
        # パスワードリセット完了
        'password_changed_confirmation': 'accounts.email.PasswordChangedConfirmationEmail',
        # メールアドレスリセット
        'username_reset': 'accounts.email.UsernameResetEmail',
        # メールアドレスリセット完了
        'username_changed_confirmation': 'accounts.email.UsernameChangedConfirmationEmail',
    },
}

カスタムユーザーの設定

メール認証をするために、カスタムユーザーの設定をします。

mysite/settings.py

AUTH_USER_MODEL = 'accounts.UserAccount'