メール設定
メールを送信するための設定をします。
ローカルでメール内容を確認するときは、EMAIL_BACKEND
をdjango.core.mail.backends.console.EmailBackend
に設定します。
本番環境用で実際のメールアドレスにメールを送るときは、EMAIL_BACKEND
をdjango.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 を使用します。
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
の設定は色々あるので、下記ドキュメントを参考にしてください。
アクセストークンの期限は 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
の設定は色々あるので、下記ドキュメントを参考にしてください。
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'