Django:旧(非授权用户)表的加密密码
Django noob。将表从MySQL导出和导入到PostgreSQL。客户和客户的表格称为Django:旧(非授权用户)表的加密密码,django,postgresql,encryption,Django,Postgresql,Encryption,Django noob。将表从MySQL导出和导入到PostgreSQL。客户和客户的表格称为users 正在尝试使用python manage.py shell将测试帐户的密码更新为Django用于加密的密码。尝试了以下操作,但显然不起作用,因为没有导入哈希算法: from account.models import Users user = Users.objects.filter(pk=2) user.set_password('new_password') 错误,因为没有属性“设置密码
users
正在尝试使用python manage.py shell
将测试帐户的密码更新为Django用于加密的密码。尝试了以下操作,但显然不起作用,因为没有导入哈希算法:
from account.models import Users
user = Users.objects.filter(pk=2)
user.set_password('new_password')
错误,因为没有属性“设置密码”
好的。尝试所有教程所说的内容:
from django.contrib.auth.models import User
User.objects.filter(pk=2)
Queryset []
User.objects.all()
然后它返回auth_user
表中的唯一用户
那么,基本上,如何对遗留用户表使用Django的加密呢
似乎在Django中,客户和客户帐户进入auth_user
表?我认为该表更适合那些应该有权访问/admin
的用户,而使用该应用程序的客户/客户则位于不同的表中
编辑1:
遗留表的密码存储在管理员定义的salt中(我相信Django对每个用户使用一个唯一的算法或类似的算法,这就是为什么我提到salt对每个人都是一样的)+通过哈希算法发送的用户密码(我想是SHA256)。所以不是纯文本
我把每个人的密码都清除了,只是想换个新的。由于旧表使用了一个散列,而Django使用了一个完全不同的散列,所以我不想在Django散列下进行解密和重新加密。从头开始
此外,我希望继续为客户/客户使用users
表,并为/admin
用户保留auth\u 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或其他任何版本中。这应该快得多
此外,我希望继续为客户/客户使用用户表
并将auth_用户保留为/admin用户。。。除非我的想法是
这是错误的
很抱歉,你的想法是错误的。不需要两个表,因为django.contrib.auth.User表有两个字段is_staff
和is_superuser
专门用于处理这种情况
或者,您可以完全放弃django.contrib.auth.models.User模型,并将您的用户模型用作默认模型。请看,拥有两个模型只是重复代码和工作,可能会带来安全问题感谢您的回复,我更新了我的问题,使之更加清晰。试图将我的客户/客户与Django/admin
用户分开放在一个表中,因此希望继续使用用户
表。只想用Djano的散列法给他们密码。。。这将使事情变得更容易。对于客户,我只想让is_staff=false
和is_superuser=false
阻止访问/admin
?然后,我会将面向客户的应用程序的逻辑建立在这些错误的基础上(或者只是添加is\u client
字段)。还发现了这个帖子,它似乎讨论了同一个主题:“我只想让is_staff=false和is_superuser=false阻止访问/admin”。