はじめに
自分用の個人開発のメモ/備忘録として記録していきます。
環境
django5.0
↓ dockerでの開発環境作成はこちら
↓ 認証ユーザーモデルはこちらをそのままそのまま利用
やりたいこと
簡単に有効期限を設定したトークン認証を実装したい
リフレッシュトークンも使えるようにしたい
django-rest-knoxと比較したい
django-rest-knoxについてはこちら
導入
インストール
pipでインストール
pip install djangorestframework-simplejwt
settings.pyの設定変更
・INSTALLED_APPSに追加
・DEFAULT_AUTHENTICATION_CLASSESを変更
・ACCESS_TOKEN_LIFETIME:トークンの有効期限を2時間に設定
・REFRESH_TOKEN_LIFETIME:リフレッシュトークンの有効期限を7日間に設定
・ROTATE_REFRESH_TOKENS:リフレッシュ トークン送信時に新しいリフレッシュトークンを取得できる
・UPDATE_LAST_LOGIN:ログイン時に auth_user テーブルの last_login フィールドが更新される
settings.py
INSTALLED_APPS = [
'rest_framework_simplejwt',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication',
],
}
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(hours=2),
'REFRESH_TOKEN_LIFETIME': timedelta(days=7),
'ROTATE_REFRESH_TOKENS': True,
'UPDATE_LAST_LOGIN': True,
}
urls.pyを作成
・既存のViewを利用
urls.py
from django.urls import path
from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
)
urlpatterns = [
path(r'token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path(r'token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]
アクセスしてみる
・prefixは「auth」
・認証カラムをemailにしている
トークン取得
・ヘッダーに「Content-Type: application/json」
リフレッシュトークンを使ってトークン取得
・ヘッダーに「Content-Type: application/json」
何かのページへアクセス
・ヘッダーに「Authorization:Bearer {{jwt_access_token}}」
・認証して簡単なメッセージを返すURLへアクセス
おわりに
・JWTをすごく簡単に導入出来た
・細かな設定がデフォルトでいくつもあり便利
参考