首页 > 解决方案 > 将 Discourse 用户迁移到 Django 用户

问题描述

我已经从 Discourse 导出了数据库。它确实包含密码哈希和盐。

我进行了研究,发现 DjangoPBKDF2默认使用,甚至Discours 也使用散列算法 sha256 和迭代次数 64000

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

标签: djangodiscourse

解决方案


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

在后端编写您自己的身份验证方法 - 当用户尝试登录时,它接受与 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


推荐阅读