我在我的API中使用了JWT。但是我不能使用JWT进行认证。我找不到的问题是什么。谢谢你的帮助。
@api_view(['POST'])
@permission_classes((AllowAny,))
def UserLogin(request):
try:
username = request.POST.get('username', None)
password = request.POST.get('password', None)
account = authenticate(username=username, password=password)
except (User.DoesNotExist, User.PasswordDoesNotMatch):
return Response({'message': 'Wrong credentials'}, status=400)
if account is not None:
if account.is_active:
login(request, account)
if request.user.is_superuser:
user_type = '0'
elif request.user.is_instructor():
user_type = '1'
elif request.user.is_student():
user_type = '2'
else:
user_type = '3'
payload = {
'user_type': user_type,
'username': username,
'exp': datetime.utcnow() + timedelta(seconds=JWT_EXP_DELTA_SECONDS)
}
jwt_token = jwt.encode(payload, JWT_SECRET, JWT_ALGORITHM)
return Response({'token': jwt_token.decode('utf-8')})
有效载荷数据返回
{
"user_type": "0",
"username": "bus",
"exp": 1475480008
}
这对我来说已经足够了。但是当我请求其他API URL时,它返回
{
"detail": "Error decoding signature."
}
1条答案
按热度按时间bqf10yzr1#
我能给你的最好建议是不要自己实现JWT逻辑。请使用包
dj_rest_auth
,或者如果你只需要JWT逻辑,使用SimpleJWT
。dj_rest_auth包为你提供了全功能的认证和授权。它还默认使用SimpleJWT作为JWT实现和功能的后端。链接:
https://dj-rest-auth.readthedocs.io/en/latest/
https://django-rest-framework-simplejwt.readthedocs.io/en/latest/