Django-rest-fram中的JWT认证

2024-06-15 07:18:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我是django_rest_框架的新手,正在尝试实现JWT身份验证。但是有一个问题,但是我发送了由用户名和密码创建的令牌,但是这个错误被触发了。在

{"detail":"Authentication credentials were not provided."}

生成令牌:

^{pr2}$

使用生成的令牌发送新的post请求:

headers = {
    'Content-Type': 'application/json',
    "Authorization": "JWT" + token,
}
data = json.dumps({"content": "Hellllllllloooo"})
new_content_req = requests.post(ENDPOINT, data=data,
                            headers=headers)

print(new_content_req.text) // {"detail":"Authentication credentials were not provided."}

REST\u FRAMEWORK默认身份验证和权限:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ), 
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    )
}


JWT_AUTH = {
    'JWT_ENCODE_HANDLER':
    'rest_framework_jwt.utils.jwt_encode_handler',

    'JWT_DECODE_HANDLER':
    'rest_framework_jwt.utils.jwt_decode_handler',

    'JWT_PAYLOAD_HANDLER':
    'rest_framework_jwt.utils.jwt_payload_handler',

    'JWT_PAYLOAD_GET_USER_ID_HANDLER':
    'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',

    'JWT_RESPONSE_PAYLOAD_HANDLER':
    'rest_framework_jwt.utils.jwt_response_payload_handler',

    'JWT_ALLOW_REFRESH': True,
    'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),

    'JWT_AUTH_HEADER_PREFIX': 'JWT',
    'JWT_AUTH_COOKIE': None,
}

前缀:

'JWT_AUTH_HEADER_PREFIX': 'JWT',
'JWT_AUTH_COOKIE': None,

查看:

class StatusAPIView(mixins.CreateModelMixin, generics.ListAPIView):
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]
    # authentication_classes = [SessionAuthentication]
    queryset = Status.objects.all()
    serializer_class = StatusSerializer

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

Tags: selfauthrestdataauthenticationutilsframeworkcontent
1条回答
网友
1楼 · 发布于 2024-06-15 07:18:22

JWT后添加空格

headers = {
    'Content-Type': 'application/json',
    "Authorization": "JWT " + token,
}
data = json.dumps({"content": "Hellllllllloooo"})
new_content_req = requests.post(ENDPOINT, data=data,
                            headers=headers)

print(new_content_req.text) 

相关问题 更多 >