😊
Django, Django REST FrameworkでJWTを使う方法
Django, Django REST FrameworkでJWTを使う方法です。
djangorestframework-simplejwtのライブラリを使用します。
djangorestframework-simplejwtと
django-rest-framework-jwtでどちらを使うか迷いましたが、
djangorestframework-simplejwtはdjango-rest-framework-jwtに影響を受けている、かつdjangorestframework-simplejwtの方がコミットが新しかったので、
djangorestframework-simplejwtを使いました。
それでは使い方です。
- djangorestframework-simplejwtをインストールする
pip install djangorestframework-simplejwt
- 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',
)
}
- JWTトークンを生成するURLをurlpatternsに追加
#JWTトークン生成
path('api/v1/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
-
usernameとpasswordでトークンを取得する方法
トーク生成ページにアクセスし、usernameとpasswordで生成
-
プログラムで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
- JWTトークンからユーザーのIDを取得
jWTTokenUserAuthentication = JWTTokenUserAuthentication()
print(jWTTokenUserAuthentication.get_user(access_token))
参考リンク
公式サイト
Discussion