django - 将 Discourse 用户迁移到 Django 用户
问题描述
我已经从 Discourse 导出了数据库。它确实包含密码哈希和盐。
我进行了研究,发现 DjangoPBKDF2
默认使用,甚至Discours 也使用散列算法 sha256 和迭代次数 64000。
我想迁移这些密码,以便 Django 能够使用相同的密码对用户进行身份验证。
解决方案
有很多方法可以做到这一点。
在后端编写您自己的身份验证方法 - 当用户尝试登录时,它接受与 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
推荐阅读
- android - Android:添加 Firebase 消息传递 - 清单合并失败
- r - 如何在 R 中的滑块输入中将步骤设为 6 小时
- sql - 相当于 Oracle 中 SQL Server 的“TOP 1”(不使用 rownum 或 row_number())
- javascript - 如何使用另一个输入表单创建 android cordova 图像上传
- c# - How to make the WPF app to, open only one new window or create only single instance of the XAML, when clicking button in MainWindow?
- pandas - 提取条件中间名和姓氏
- css - 如何在 Laravel 的刀片中使用自定义字体?
- php - 如何使以下选择语句起作用
- regex - htaccess 重写规则,匹配 URL 参数
- grpc - gRPC API 返回“Any”是个好主意吗?