如何在 DRF JWT 视图上设置自定义权限 class?
How can I set a custom permission class on DRF JWT views?
我有自定义权限 class 拒绝任何没有在请求 headers 中提供的正确 API 密钥的请求,我不确定如何添加它到 Django Rest Framework JWT 视图,包括 obtain_jwt_token
、refresh_jwt_token
和 verify_jwt_token
。我怎样才能做到这一点?
可以通过扩展 jwt-view 并使用新创建的视图来实现。请参阅下面的示例,
# permissions.py
from rest_framework.permissions import BasePermission
class MyPermissionClass(BasePermission):
# do something with your permission class
pass
# jwt_clone_views.py
from rest_framework_jwt.views import ObtainJSONWebToken, RefreshJSONWebToken, VerifyJSONWebToken
permission_cls = {"permission_classes": (MyPermissionClass,)}
obtain_jwt_token = ObtainJSONWebToken.as_view(**permission_cls)
refresh_jwt_token = RefreshJSONWebToken.as_view(**permission_cls)
verify_jwt_token = VerifyJSONWebToken.as_view(**permission_cls)
# urls.py
from .jwt_clone_views import obtain_jwt_token, refresh_jwt_token, verify_jwt_token
urlpatterns = [
'',
# ...
url(r'^api-token-auth/', obtain_jwt_token),
# and so on
]
这里我创建了一个名为jwt_clone_views
的新模块,它将权限类作为参数。
在 urls.py
中,我使用了新创建的视图,其中包括 permission_classes
注意:我没有测试解决方案。
我有自定义权限 class 拒绝任何没有在请求 headers 中提供的正确 API 密钥的请求,我不确定如何添加它到 Django Rest Framework JWT 视图,包括 obtain_jwt_token
、refresh_jwt_token
和 verify_jwt_token
。我怎样才能做到这一点?
可以通过扩展 jwt-view 并使用新创建的视图来实现。请参阅下面的示例,
# permissions.py
from rest_framework.permissions import BasePermission
class MyPermissionClass(BasePermission):
# do something with your permission class
pass
# jwt_clone_views.py
from rest_framework_jwt.views import ObtainJSONWebToken, RefreshJSONWebToken, VerifyJSONWebToken
permission_cls = {"permission_classes": (MyPermissionClass,)}
obtain_jwt_token = ObtainJSONWebToken.as_view(**permission_cls)
refresh_jwt_token = RefreshJSONWebToken.as_view(**permission_cls)
verify_jwt_token = VerifyJSONWebToken.as_view(**permission_cls)
# urls.py
from .jwt_clone_views import obtain_jwt_token, refresh_jwt_token, verify_jwt_token
urlpatterns = [
'',
# ...
url(r'^api-token-auth/', obtain_jwt_token),
# and so on
]
这里我创建了一个名为jwt_clone_views
的新模块,它将权限类作为参数。
在 urls.py
中,我使用了新创建的视图,其中包括 permission_classes
注意:我没有测试解决方案。