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

问题描述

对于我当前的系统,我正在使用Simple-JWT作为用户身份验证。并且也使用Django REST Framework API Key。我对Simple-JWT的简单性感到满意。但是,我想在需要我的Api-Key才能查看令牌页面的地方添加一个权限。

就目前而言,如果我想获得JWT令牌,

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

OR

/ 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创建函数。将这两个视图插入到自定义视图的参数中。只有这样才能插入权限类。到目前为止,我希望仅使用有效的API密钥访问自定义视图。

views.py

from rest_framework_simplejwt.views import(
TokenObtainPairView,TokenRefreshView,)

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

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