Django импортирует существующие Ppasswords с PHP-сайта, который использовал password_hash()

Мне нужно импортировать список пользователей и хэшированные пароли со старого PHP сайта, который использовал password_hash(), на новый django сайт. Сохраненные пароли выглядят следующим образом: $2y$10$ZnxKDPbqOfACnGmQeN76o.UtdwWBFBCCLTiGnvCSvl/zqIBeVxhai

Я нашел Django password hasher using php format of function password_hash() здесь, когда пытался найти это, и я думаю, что это поможет для NEXT шага.

Но в настоящее время я не могу настроить процесс импорта, который правильно перенесет старые пароли. Когда я пытаюсь вручную создать пользователей во время процесса импорта, он отказывается принимать пароль, заявляя "Неверный формат пароля или неизвестный алгоритм хэширования.", когда я смотрю на пользователей после запуска импорта. Я думаю, что я просто делаю это совершенно неправильно, вот пример фрагмента, где я создаю пользователей.

usertest = User(username='testguy',email='testguy@test.com',password='$2y$10$ZnxKDPbqOfACnGmQeN76o.UtdwWBFBCCLTiGnvCSvl/zqIBeVxhai')

В результате пароль не сохраняется. Использование функции create_user приводит к тому, что пользователь создается, но в качестве пароля выводится хэшированный пароль: User.objects.create_user(username='testguy',email='testguy@test.com',password='$2y$10$ZnxKDPbqOfACnGmQeN76o.UtdwWBFBCCLTiGnvCSvl/zqIBeVxhai')

Как я могу просто правильно сохранить эти пароли в новой базе данных, чтобы я мог перейти к следующему шагу - фактической проверке этих паролей?

Мне удалось найти обходной путь, который работает для меня, он не совсем делает ТОЧНО то, что я изначально планировал, но работает достаточно хорошо. Для тех, кто хочет сделать что-то подобное, вот что я в итоге сделал.

Вместо того, чтобы импортировать их в фактическое поле пароля пользователя Django Auth, добавьте новое поле old_password к вашим пользователям и импортируйте старые хэшированные пароли туда.

Затем отредактируйте вашу функцию authenticate (скорее всего, в backends.py), чтобы она проверяла поле old_password с помощью bcrypt, если проверка пароля не удалась при входе в систему:

            if user.check_password(password):
                return user
            else: #didnt match check if its an old user
                if user.old_password != "":
                    if bcrypt.checkpw(bytes(password, 'utf-8'), bytes(user.old_password, 'utf-8')):
                        user.set_password(password)
                        user.save()
                        return user
Вернуться на верх