Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django:旧(非授权用户)表的加密密码_Django_Postgresql_Encryption - Fatal编程技术网

Django:旧(非授权用户)表的加密密码

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') 错误,因为没有属性“设置密码

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')
错误,因为没有属性“设置密码”

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

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”。