Django Rest Frameworl JWT中的签名无效

Django Rest Frameworl JWT中的签名无效,django,django-rest-framework,jwt,django-rest-framework-jwt,Django,Django Rest Framework,Jwt,Django Rest Framework Jwt,我已经创建了一个自定义登录视图来覆盖下面的获取jwt令牌视图 class LoginView(ObtainJSONWebToken): def post(self, request, *args, **kwargs): user = User.objects.using(self.request.session.get('shop')).get(mobile=str(request.data['mobile'])) if not user.check_pa

我已经创建了一个自定义登录视图来覆盖下面的获取jwt令牌视图

class LoginView(ObtainJSONWebToken):
    def post(self, request, *args, **kwargs):
        user = User.objects.using(self.request.session.get('shop')).get(mobile=str(request.data['mobile']))
        if not user.check_password(request.data['password']):
            return Response({'Error': "Invalid mobile or password"}, status="400")
        exp = datetime.datetime.now() + datetime.timedelta(seconds=settings.TOKEN_EXP_TIME)
        exp = int(datetime.datetime.timestamp(exp))
        orig_iat = int(datetime.datetime.timestamp(datetime.datetime.now()))
        if user:
            payload = {
                'user_id': user.id,
                "username": user.mobile,
                "exp": exp,
                "email": "",
                'mobile': user.mobile,
                "orig_iat": orig_iat
            }
           jwt_token = {'token': jwt.encode(payload, settings.SECRET_KEY)}
           return Response(jwt_token, status=status.HTTP_200_OK)
        else:
            return Response({'Error': "Invalid credentials"}, status=status.HTTP_400_BAD_REQUEST)

        response = super().post(request, *args, **kwargs)
        return response
登录后,将成功创建令牌,但当我要调用API(从postman)时,获取
{“detail”:“无效签名”。}
错误

我正在使用get方法使用API,并且在头文件中添加了
JWT my_TOKEN
中的
Authorization

有什么想法吗?

我认为您应该使用jwt\u encode\u处理程序对负载进行编码。请参见下面的示例

from rest_framework_jwt.settings import api_settings


jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER


class LoginView(ObtainJSONWebToken):
     def post(self, request, *args, **kwargs):
        ...
        jwt_token = {'token': jwt_encode_handler(payload)}
        ...

我认为您应该使用jwt_encode_处理程序对负载进行编码。请参见下面的示例

from rest_framework_jwt.settings import api_settings


jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER


class LoginView(ObtainJSONWebToken):
     def post(self, request, *args, **kwargs):
        ...
        jwt_token = {'token': jwt_encode_handler(payload)}
        ...

您可以尝试使用
承载您的\u令牌
,而不是
JWT MY \u令牌
。我确实这样做了,但得到了相同的错误。我还在
JWT\u AUTH
设置中添加了
'JWT\u AUTH\u HEADER\u PREFIX':'JWT',
。我认为您应该使用
JWT\u encode\u处理程序对负载进行编码。这将返回一个令牌,该令牌使用与drf jwt令牌验证器相同的算法和密钥进行编码。您可以尝试使用
承载您的\u令牌
,而不是
jwt MY \u令牌
。我这样做了,但得到了相同的错误。我还在
JWT\u AUTH
设置中添加了
'JWT\u AUTH\u HEADER\u PREFIX':'JWT',
。我认为您应该使用
JWT\u encode\u处理程序对负载进行编码。这将返回使用与drf jwt令牌验证器相同的算法和密钥编码的令牌。