Как проверить хэшированные пароли Django в приложении FastAPI
Итак, у меня есть проект Python на Django, и я пытаюсь изменить его на FastAPI. Пароли в базе данных уже хешированы (я использую ту же базу данных из проекта Django), пароли в базе данных начинаются с pbkdf2_sha256$260000$.
Я пытаюсь выполнить функцию входа в систему, но у меня возникают проблемы с паролем.
Я получаю ошибку:
"raise exc.UnknownHashError("hash could not be identified")
passlib.exc.UnknownHashError: hash could not be identified"
Когда я вставляю имя пользователя и пароль в форму входа fastapi.
#Security config
security = HTTPBasic()
pwd_context = CryptContext(schemes=["pbkdf2_sha256"], deprecated="auto")
async def login(request: Request):
form = await request.form()
username = form.get("username")
password = pwd._context(form.get("password"))
db = database.SessionLocal()
user = db.query(models.User).filter(models.User.username == username).first()
if not user or not pwd_context.verify(password, user.password):
raise HTTPException(status_code=401, detail="Invalid username or password")
token = create_jwt_token(user.id)
response = RedirectResponse(url="/index", status_code=301)
response.set_cookie(key="token", value=token)
return response
Я пытаюсь хэшировать пароль, который вводит пользователь, чтобы его можно было сверить с хэшированным паролем в базе данных. Я также пробовал password = form.get("password")
, но ошибка все равно выскакивает.
Вот эта ошибка:
File "C:\Users\user\Desktop\VSPRojects\LoginFastapi\db\views.py", line 53, in login
if not user or not pwd_context.verify(password, user.password):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\Desktop\VSPRojects\LoginFastapi\venv\Lib\site-packages\passlib\context.py", line 2343, in verify
record = self._get_or_identify_record(hash, scheme, category)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\Desktop\VSPRojects\LoginFastapi\venv\Lib\site-packages\passlib\context.py", line 2031, in _get_or_identify_record
return self._identify_record(hash, category)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\user\Desktop\VSPRojects\LoginFastapi\venv\Lib\site-packages\passlib\context.py", line 1132, in identify_record raise exc.UnknownHashError("hash could not be identified")
passlib.exc.UnknownHashError: hash could not be identified
Вы можете использовать passlib.hash
от django_pbkdf2_sha256
, который является специальным обработчиком, который соответствует алгоритму Django для паролей, использующих pbkdf2_sha256
, как и размер контрольной суммы.
НАПРИМЕР:
from passlib.hash import django_pbkdf2_sha256
security = HTTPBasic()
async def login(request: Request):
form = await request.form()
username = form.get("username")
password = form.get("password")
db = database.SessionLocal()
user = db.query(models.User).filter(models.User.username == username).first()
if not user or not django_pbkdf2_sha256.verify(password, user.password):
raise HTTPException(status_code=401, detail="Invalid username or password")
token = create_jwt_token(user.id)
response = RedirectResponse(url="/index", status_code=301)
response.set_cookie(key="token", value=token)
return response