rest_framework_simplejwt post 到 APIView

rest_framework_simplejwt post to an APIView

我有这个设置:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ]
}

而这个观点:

class Config(APIView):
    def get(self, request, *args, **kwargs):
        if 'config' in request.GET.dict():
            if os.path.isfile(settings.CONFIG):
                yaml = read_config(settings.CONFIG)
                return Response(yaml)
            else:
                return Response({
                    "success": False,
                    "error": "config file not found!"})
        else:
            return Response({"success": False})

    def post(self, request, *args, **kwargs):
        if 'data' in request.data:
            print(request.data['data'])

        return Response({"success": False})

我使用 axios 管理我的 api 调用,例如:

axios.post('api/config/?config', { data: obj, headers: { Authorization: 'Bearer ' + rootState.auth.jwtToken } })

现在的问题是,我无法 post 数据。我收到 Unauthorized (401) 错误,在响应消息中显示:{"detail":"Authentication credentials were not provided."}

你能告诉我,我在这里遗漏了什么吗?我该如何解决这个问题?

1- settings.py 中的 AUTH_HEADER_TYPES 是什么?承载或智威汤逊。如果是 JWT,您必须更改 header 身份验证类型。

2- 您是否提供了身份验证并获取令牌?

解决方案:

axios Post请求假设第二个参数是data,第三个参数是config。您在第二个参数中发送了 header。您可以在配置中设置 headers。

axios.post(url, data, config)

将您的 axios.post 更改为:

axios.post('api/config/?config', { data: obj }, {
headers: { Authorization: 'Bearer ' + rootState.auth.jwtToken }})