[英]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_staff
和is_superuser
, is_superuser
专门设计用于处理这种情况。
或者,您可以完全放弃django.contrib.auth.models.User模型,并使用您的用户模型作为默认模型。 请参阅指定具有两个模型的自定义用户模型只是复制代码和工作,并可能引入安全性问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.