#python #django #django-rest-framework #django-rest-framework-simplejwt
#python #django #django-rest-framework #django-rest-framework-simplejwt
Вопрос:
Я работаю над приложением django rest api, которое использует JWTAuthentication с использованием django-rest-framework-simplejwt. Поскольку используется алгоритм RSA, необходимо установить ключ подписи и проверки.
Приведенная ниже реализация сработала для меня.
SIMPLE_JWT = {
'SIGNING_KEY': open('jwtRS256.key').read() if os.path.isfile('./jwtRS256.key') else None,
'VERIFYING_KEY': open('jwtRS256.key.pub').read() if os.path.isfile('./jwtRS256.key.pub') else None,
}
После обновления до django 3 и запуска py -Wa manage.py test
. Это некоторые из отображаемых предупреждающих сообщений.
D:pathtosettings.py:398: ResourceWarning: unclosed file <_io.TextIOWrapper name='jwtRS256.key' mode='r' encoding='cp1252'>
'SIGNING_KEY': open('jwtRS256.key').read() if os.path.isfile('./jwtRS256.key') else None,
ResourceWarning: Enable tracemalloc to get the object allocation traceback
D:pathto\settings.py:399: ResourceWarning: unclosed file <_io.TextIOWrapper name='jwtRS256.key.pub' mode='r' encoding='cp1252'>
'VERIFYING_KEY': open('jwtRS256.key.pub').read() if os.path.isfile('./jwtRS256.key.pub') else None,
ResourceWarning: Enable tracemalloc to get the object allocation traceback
Я попробовал альтернативу для решения этой проблемы, но, похоже, она нарушает работу приложения при аутентификации пользователей. Это попытка решения.
def get_file(file_url):
if os.path.isfile(file_url):
with open(file_url) as f:
return f
return None
SIMPLE_JWT = {
'SIGNING_KEY': get_file('./jwtRS256.key'),
'VERIFYING_KEY': get_file('./jwtRS256.key.pub')
}
Это не работает при попытке входа в систему и возвращает 500 с TypeError: Expecting a PEM-formatted key.
Ответ №1:
Мой плохой. Я забыл прочитать файл.
def get_file(file_url):
if os.path.isfile(file_url):
with open(file_url) as f:
return f.read()
return None
Ответ №2:
вы можете попробовать так
def get_file(file_url):
file_path = os.path.join(settings.MEDIA_ROOT, file_url)
if os.path.exists(file_path):
with open(file_path,'rb') as f:
return f.read()
return None