首页 > 解决方案 > 在 Django 中覆盖用户的检查密码

问题描述

我正在将 PHP 后端迁移到 Django,我不想让用户更改密码。在 PHP 中,我使用 Bcrypt,它使用 version 2y,而 Django 使用2b,使其不兼容。

我已经阅读了人们编写全新哈希器的其他解决方案,但这似乎太难了。我的解决方案是覆盖check_password()我的User模型的功能:

def check_password(self, raw_password):
    alg_prefix = 'bcrypt_php'
    if self.password.startswith(alg_prefix):
        return bcrypt.checkpw(bytes(raw_password, 'utf-8'), bytes(self.password[len(alg_prefix):], 'utf-8'))
    else:
        return super().check_password(raw_password)

bcrypt_php并保存在开始时添加的旧密码。

问题是:这样做有危险吗?我是否将密码或系统置于危险之中?

标签: djangosecuritypasswordsbcrypt

解决方案


推荐阅读