У меня есть некоторые требования, когда мне нужно иметь возможность аутентифицировать пользователя либо с username/password
, либо с api_key
и возвращать токен JWT для обоих случаев.
Мой подход с именем пользователя / паролем:
if request.data['email'] and request.data['password']:
try:
user = User.objects.get(email=request.data['email'])
except User.DoesNotExist:
return Response({'Error': "Invalid username."}, status=status.HTTP_400_BAD_REQUEST)
if user:
if user.check_password(request.data['password']):
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
exp = datetime.now() + api_settings.JWT_EXPIRATION_DELTA
return Response({'token': token,
'exp': format(exp, 'U')},
status=status.HTTP_200_OK)
else:
return Response({'Error': "Invalid password."}, status=status.HTTP_400_BAD_REQUEST)
, где jwt_payload_handler
реализован как:
def jwt_payload_handler(user):
payload = {
"id": user.id,
"date": get_user_join_date(user),
"username": user.username, }
return payload
Один из моих вопросов - не нужно ли указывать ключевое слово в полезной нагрузке токенабыть верным ?
Каким будет хороший подход в случае, если ключ api_key считает, что ключ не связан с пользователем?
Должен ли я создать пользователя по умолчанию, который будет использоваться в полезной нагрузке, если указан правильный api_key?
Есть предложения?