😊

Django, Django REST FrameworkでJWTを使う方法

2021/05/01に公開

Django, Django REST FrameworkでJWTを使う方法です。

djangorestframework-simplejwtのライブラリを使用します。

djangorestframework-simplejwtと
django-rest-framework-jwtでどちらを使うか迷いましたが、
djangorestframework-simplejwtはdjango-rest-framework-jwtに影響を受けている、かつdjangorestframework-simplejwtの方がコミットが新しかったので、
djangorestframework-simplejwtを使いました。

それでは使い方です。

  1. djangorestframework-simplejwtをインストールする
pip install djangorestframework-simplejwt
  1. Djangoのsettings.pyでauthentication classesにrest_framework_simplejwtを使う事を設定
REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': ( #ここを追加
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
}
  1. JWTトークンを生成するURLをurlpatternsに追加
#JWTトークン生成
path('api/v1/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
  1. usernameとpasswordでトークンを取得する方法
    トーク生成ページにアクセスし、usernameとpasswordで生成

  2. プログラムでJWTトークンの取得方法、JWTトークンからユーザーIDの取得

from rest_framework_simplejwt.tokens import RefreshToken
from rest_framework_simplejwt.authentication import JWTTokenUserAuthentication

"""ログインしているユーザーからJWTトークンを生成"""
# request.userでログインユーザーを取得
refresh = RefreshToken.for_user(request.user)
access_token = refresh.access_token
  1. JWTトークンからユーザーのIDを取得
jWTTokenUserAuthentication = JWTTokenUserAuthentication()
print(jWTTokenUserAuthentication.get_user(access_token))

参考リンク
公式サイト
https://django-rest-framework-simplejwt.readthedocs.io/en/latest/

Discussion