繁体   English   中英

Django:旧版(非auth_user)表的加密密码

[英]Django: Encrypted password to legacy (not auth_user) table

Django新手。 从MySQL导出和导入表到PostgreSQL。 客户和客户的表称为users

尝试将测试帐户的密码更新为Django使用python manage.py shell进行加密的密码。 尝试了以下操作,由于未将哈希算法导入其中,因此显然不起作用:

from account.models import Users
user = Users.objects.filter(pk=2)
user.set_password('new_password')

由于no attribute 'set_password'而导致错误。

精细。 尝试所有教程所说的内容:

from django.contrib.auth.models import User
User.objects.filter(pk=2)
Queryset []
User.objects.all()

然后,它返回auth_user表中的唯一用户。

因此,基本上,如何对旧users表使用Django的加密?

看来在Django客户和客户帐户中进入auth_user表? 我认为该表对应该有权访问/admin用户以及使用该应用程序的客户/客户位于另一个表中的作用更大。

编辑1:

旧表的密码与管理员定义的盐一起存储(我相信Django为每个用户或类似的东西使用独特的算法,所以这就是为什么我提到盐对每个人都是相同的)+通过哈希发送的用户密码算法(我认为是SHA256)。 所以不是纯文本。

我清除了每个人的密码,然后将其设为新密码。 由于旧表使用的是一个哈希值,而Django使用的是完全不同的哈希值,因此我不想在Django哈希值下搞乱解密和重新加密。 从头开始。

另外,我想继续为客户/客户使用users表,为/admin用户保留auth_user ...除非我的想法是错误的。

好吧,您没有提到旧表的外观,该答案假定它具有基本的用户名,密码和电子邮件字段。 如果您现在以纯文本形式存储密码,则可以对其进行哈希处理,但是如果您使用某种第三方解决方案,则每个用户都必须重置其密码。

import account.models import User as LegacyUser
import django.contrib.auth.models User

users = []
for u in LegacyUser.objects.all():
    new_user = User(username=u.user, email=u.email)
    new_user.set_password(u.password)
    users.append(new_user)

User.objects.bulk_create(users)

以上是您是否想挽回密码,如果您不只是这样做:

INSERT INTO auth_user(username,password,email) SELECT username, password, email FROM account_user

在psql或pgadmin或其他中。 这应该快得多。

另外,我想继续为客户/客户使用users表,为/ admin用户保留auth_user ...除非我的想法是错误的。

很抱歉,您对此的想法是错误的。 不需要两个表,因为django.contrib.auth.User表具有两个字段is_staffis_superuseris_superuser专门设计用于处理这种情况。

或者,您可以完全放弃django.contrib.auth.models.User模型,并使用您的用户模型作为默认模型。 请参阅指定具有两个模型的自定义用户模型只是复制代码和工作,并可能引入安全性问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM