Django Rest Framework 中 Simple-JWT 的自定义权限
Posted
技术标签:
【中文标题】Django Rest Framework 中 Simple-JWT 的自定义权限【英文标题】:Custom permissions for Simple-JWT in Django Rest Framework 【发布时间】:2020-12-18 07:48:30 【问题描述】:对于我当前的系统,我使用Simple-JWT 作为我的用户身份验证。并且还使用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”权限)
【问题讨论】:
【参考方案1】:创建一个新视图并从 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,)
【讨论】:
请详细说明。你能给出创建权限视图的工作代码吗?以上是关于Django Rest Framework 中 Simple-JWT 的自定义权限的主要内容,如果未能解决你的问题,请参考以下文章
如何为 django-rest-framework api 编写单元测试?
Django Rest Framework:序列化程序响应错误
Django Rest Framework组件:解析器JSONParserFormParserMultiPartParserFileUploadParser
Python前后端分离开发Vue+Django REST framework实战