gpt4 book ai didi

django - 权限类装饰器被忽略。 "Authentication credentials were not provided"响应

转载 作者:行者123 更新时间:2023-12-04 01:56:25 27 4
gpt4 key购买 nike

我正在为我的 API 服务使用 Django Rest Framework。在我的 settings.py 中,我有以下 REST_FRAMEWORK 设置:

REST_FRAMEWORK = {
...
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated'
)
...
}
现在我想更改权限类以允许任何人使用一个 View 。我使用过@permission_classes 装饰器。
class UserViewSet(viewsets.ModelViewSet):

serializer_class = RegisterSerializer
queryset = User.objects.all()

@permission_classes([permissions.AllowAny,])
def create(self, request, *args, **kwargs):
data = request.data
...
我应该能够在没有任何权限的情况下执行创建操作。相反,我在尝试访问 API 时收到身份验证错误。
    "detail": "Authentication credentials were not provided."
根据 docs @permission_classes 装饰器是这种权限覆盖的正确方法。这是 Django 2.2.4 和 DRF 3.10.2。
编辑
我忘了提到我不想让任何人访问任何 View ,只允许选择的 View 。大多数 View 应该具有全局设置的 IsAuthenticated 权限。

最佳答案

可以使用 DEFAULT_PERMISSION_CLASSES 设置全局设置默认权限策略。例如。

REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
]}

如果未指定,则此设置默认为允许不受限制的访问:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
]}

如需进一步引用,您可以查看 DRF 文档 doc

编辑:

您可以使用自己的类覆盖权限:
from rest_framework import permissions

class SkipAuth(permissions.IsAuthenticated):
def has_permission(self, request, view):
return True

并使用此类跳过特定功能的身份验证:
@permission_classes([SkipAuth])
def create(self, request, *args, **kwargs):
data = request.data
...

关于django - 权限类装饰器被忽略。 "Authentication credentials were not provided"响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57551045/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com