Django:加密密码到遗留(不是auth_user)表

时间:2017-01-06 04:00:57

标签: 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')

错误,因为有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表,并为auth_user的用户保留/admin ...除非我的想法是错误的。< / p>

1 个答案:

答案 0 :(得分:2)

嗯,你还没有提到你的遗产表是什么样的,这个答案假定它有基本的用户名,密码和电子邮件字段。如果您在密码被存储的情况下以明文形式存储密码,但如果您使用某种第三方解决方案,则每个用户都必须重置其密码。

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表   并保留auth_user给/ admin的用户...除非我的想法   错了。

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

或者,您可以完全抛弃django.contrib.auth.models.User模型并使用您的用户模型作为默认模型。请参阅Specifying a custom user model有两个模型只是重复代码和工作,并可能引入安全问题