Трудно точно определить, что происходит не так, потому что нам не хватает MCVE и следов ошибок , в любом случае мы можем хотя бы догадаться, что может быть причина.
Фиктивная строка
Во-первых, у вас есть проблема в этой строке:
password = b'password'
Вы никогда не сохраняли пароль пользователя, вместо этого все они были заменены значение password
. Закомментируйте эту строку в своей функции, и вы сможете сохранить вводимый пользователем пароль вместо фиктивного значения.
К сожалению, восстановить уже сохраненный пароль невозможно, поскольку вы потеряли исходную информацию о пользователе.
Рабочий процесс
Затем мы можем подтвердить, что bcrypt
работает должным образом:
import bcrypt
saltp = bcrypt.gensalt(14) # b'$2b$14$7QmgF.1F4dTKeb8o8dprEu'
hashp = bcrypt.hashpw('abcdef'.encode(), saltp) # b'$2b$14$7QmgF.1F4dTKeb8o8dprEuo2T2Y908hdZan9fb.LDWDuibPl/SLpm'
bcrypt.checkpw('abcdef'.encode(), hashp) # True
Из этого фрагмента выше вы должны попробовать все этапы вашего процесса (добавьте MySQL I / O с fre sh паролями), чтобы выделить, какой из них вызывает проблему:
- Пароль, собранный с локалью на стороне клиента (
str
); - Хеширование пароля с использованием bcrypt (
bytes
) на стороне сервера; - Пароль ha sh хранится в MySQL (затронутый первой ошибкой, мы до сих пор не знаем, какой тип вы его сохранили и если он должен экранированный или нет, прочтите комментарий)
- Пароль ha sh получен из MySQL;
- Пароль ha sh по сравнению с вводом пользователя с использованием bcrypt;
Опасность
* 1 044 *
Я предполагаю: проблема находится между Flask и MySQL, вы не сохраняете то, что вы думаете, из-за проблемы с приведением
bytes
(
BLOB
) vs
str
(
TEXT
). Скорее всего, поэтому вам пришлось настроить
user["Password"].encode('utf-8')
, но это могло привести к другой ошибке, потому что вы не избежали своего хешированного пароля: вам, вероятно, нужно избежать хешированного пароля как
, в котором вы пытаетесь сохранить двоичные данные в текстовое поле .
Мой совет: на каждом этапе потока паролей проверяйте значения password / ha sh и подтверждайте, что вы обрабатываете то, что вы думаете. Когда возникает несоответствие, вы определяете источник ошибки. Затем явно опишите это в своем POST, если вам все еще нужна помощь.