【发布时间】: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