Django Rest Framework 中 Simple-JWT 的自定义权限

Custom permissions for Simple-JWT in Django Rest Framework

对于我当前的系统,我使用 Simple-JWT as my user authentication. And also using Django REST Framework API Key。我对 Simple-JWT 的简单性感到满意。但是,我想添加一个权限,它需要我的 Api-Key 才能查看令牌页面。

至于现在,如果我想获得一个JWT Token,

我可以简单地转到 /project/api/token/(获取访问和刷新令牌)

/project/api/refresh/(刷新访问令牌)

在我的 settings.py 文件中,我设置了 DEFAULT_AUTHENTICATION_CLASSES 和 DEFAULT_PERMISSION_CLASSES。据我了解,如果我将 'HasAPIKey' 作为默认权限 类,所有页面都需要 Api-Key.

REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework_simplejwt.authentication.JWTAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
    'rest_framework_api_key.permissions.HasAPIKey',
),
}

但是 /token/ 和 /refresh/ 仍然可以在没有 Api-Key 的情况下访问。 因此,我的目标是确保这些 URL 需要我的 Api-Key.

(注意:我对'simple-jwt'如何提供令牌非常满意。它很容易实现。我只是想添加'HasAPIKey'权限)

创建新视图并继承 rest_framework_simplejwt 的视图。为 TokenObtainPairView 和 TokenRefreshView 创建函数。将这两个视图插入到自定义视图的参数中。然后才插入权限class。截至目前,我希望只能使用有效的 API 键访问我的自定义视图。

views.py

from rest_framework_simplejwt.views import(
TokenObtainPairView,
TokenRefreshView,
)

class NewTokenObtainPairView(TokenObtainPairView):
     permission_classes = (HasAPIKey,)

class NewTokenRefreshView(TokenRefreshView):
     permission_classes = (HasAPIKey,)