BLOG

DRF + Djoser + JWTでリフレッシュトークンが取得できない事象を解決してみる

Django Rest Frameworkにユーザー認証機能をつける際、アップデートによるバージョンの違いによってエラーが起きるのでその解消法を記載します。

実行環境

  • Python (3.8, 3.9)
  • Django (2.2, 3.0, 3.1)
  • Django REST Framework (3.10, 3.11, 3.12)
  • djangorestframework-simplejwt (4.6.0)
  • djoser (0.4.1)

pathにdjoser.urls.jwtが設定できない

バージョン変更に伴い、urls.pyの中のpathに “djoser.urls.jwt” が設定できなくなりました。

このurl pathを設定することでアクセストークンやリフレッシュトークンを取得するはずなのですが、これができません。

そこで、公式ドキュメントより、以下の方法を採用します。

インストール

$ pip install djangorestframework-simplejwt

settings.py に以下を設定

REST_FRAMEWORK = {
    ...
    'DEFAULT_AUTHENTICATION_CLASSES': (
        ...
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
    ...
}

プロジェクト直下のurls.pyに以下を設定

from rest_framework_simplejwt.views import (
    TokenObtainPairView,
    TokenRefreshView,
)

urlpatterns = [
    ...
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
    ...
]

これでアクセストークンとリフレッシュトークンを取得することができるようになります。