【问题标题】:Invalid signature in Django Rest Frameworl JWTDjango Rest Framework JWT 中的无效签名
【发布时间】:2020-01-10 08:35:22
【问题描述】:

我已经创建了一个自定义登录视图来覆盖 get_jwt_token 视图,如下所示。

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(来自邮递员)时,得到 {"detail": "Invalid signature."} 错误。

我正在通过 get 方法使用我的 API,并且在标题中的 Authorization 中添加了 JWT MY_TOKEN。 有什么想法吗?

【问题讨论】:

  • 您可以尝试使用Bearer YOUR_TOKEN 而不是JWT MY_TOKEN
  • 我做了但得到了同样的错误。我还在JWT_AUTH 设置中添加了'JWT_AUTH_HEADER_PREFIX': 'JWT',
  • 我认为您应该使用jwt_encode_handler 对您的有效负载进行编码。这将返回一个使用与 drf-jwt 令牌验证器相同的算法和密钥编码的令牌。

标签: django django-rest-framework jwt django-rest-framework-jwt


【解决方案1】:

我认为您应该使用 jwt_encode_handler 对您的有效负载进行编码。请参阅下面的示例。

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)}
        ...

【讨论】:

    猜你喜欢
    • 2018-03-28
    • 1970-01-01
    • 2017-02-26
    • 2016-12-29
    • 2020-01-21
    • 2018-05-08
    • 2019-05-12
    • 2019-08-01
    • 2018-01-24
    相关资源
    最近更新 更多