将Discourse用户迁移到Django用户

时间:2018-08-12 16:54:34

标签: django discourse

我已经从Discourse导出了数据库。它确实包含password_hash和salt。

我完成了研究,发现Django默认使用PBKDF2甚至使用Discours use that with hashing algorithm sha256 and number of iterations 64000

我想迁移这些密码,以便Django能够使用相同的密码对用户进行身份验证。

1 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点。

在后端中编写自己的身份验证方法-当用户尝试登录时,该方法接受与Discourse相同的哈希方法。这样,哈希密码应与用户的密码和他们输入的密码相匹配。

这可以如下进行:

from django.contrib.auth.hashers import PBKDF2PasswordHasher

class MyPBKDF2PasswordHasher(PBKDF2PasswordHasher):
    """
    A subclass of PBKDF2PasswordHasher that uses 64000 times more iterations.
    """
    iterations = PBKDF2PasswordHasher.iterations * n
    iterations = 64000 #Use this for simplicity!!
hashers.py

。请注意-PBKDF2PasswordHasher.iterations * n必须等于64000-我认为当前的迭代次数设置为150000,因此直接拥有iterations = 64000可能更容易。迭代就是您要更改的全部内容,所有其他行为将从PBKDF2PasswordHasher类继承。

然后,您需要做的只是:

PASSWORD_HASHERS = [
    'application_name.hashers.MyPBKDF2PasswordHasher',
]
settings.py中的

,其中application_name是的,您猜到了,即可以找到hashers.py的应用程序的名称。

但是...以下有关密码存储和散列的文档可能对您的搜索非常有用:

https://docs.djangoproject.com/en/2.1/topics/auth/passwords/#auth-password-storage