Django Rest Frameworl JWT中的签名无效
我已经创建了一个自定义登录视图来覆盖下面的获取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
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令牌验证器相同的算法和密钥编码的令牌。