Здесь происходит то, что строка даты кодируется дважды.
Возвращаемым значением get_user_join_date(user)
является строка '"2018-09-27T12:32:17.577000+00:00"'
(поэтому формат даты и времени в формате ISO заключен в двойные кавычки).
Эта строка помещается в полезную нагрузку и снова выводится в JSON всем, что вы используете для создания токена JWT.
Сокращенный пример того, что вы видите, будет следующим:
import json
import datetime
def default(o):
if type(o) is datetime.date or type(o) is datetime.datetime:
return o.isoformat()
print(json.dumps({
'date': json.dumps(
datetime.datetime.now(),
default=default
)
}))
, который производит вывод, который вы видите:
{"date": "\"2018-10-09T12:53:04.914694\""}
Существует несколько решений этой проблемы:
Самым простым решением этой проблемы было быне использовать json.dumps
в get_user_join_date
и просто возвращать user.date_joined.isoformat()
вместо этого.
Другим решением было бы вернуть user.date_joined
из get_user_join_date
и как-то передать пользовательский default
функция для JSON-кодировщика, используемого всем, что обрабатывает эту полезную нагрузку JWT.
Может также быть возможно просто вернуть объект даты из get_user_join_date
, но только если библиотека, которую вы 'Повторное использование достаточно умен, чтобы обрабатывать объект datetimeTS (некоторые из них).