LoginSignup
0
0

[Django]トークン認証にdjangorestframework-simplejwtを利用する

Last updated at Posted at 2024-04-13

はじめに

自分用の個人開発のメモ/備忘録として記録していきます。

環境

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」
image.png

リフレッシュトークンを使ってトークン取得

・ヘッダーに「Content-Type: application/json」
image.png

何かのページへアクセス

・ヘッダーに「Authorization:Bearer {{jwt_access_token}}」
・認証して簡単なメッセージを返すURLへアクセス
image.png

有効ではないトークンだと401となる
image.png

おわりに

・JWTをすごく簡単に導入出来た
・細かな設定がデフォルトでいくつもあり便利

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0