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

标签 django postgresql encryption

Django 菜鸟。将表从 MySQL 导出和导入到 PostgreSQL。客户和客户的表称为 users

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

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

错误是因为没有属性“set_password”

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

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

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

那么基本上,我如何使用 Django 的加密来对付遗留 users 表?

在 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 或其他什么。这应该快得多。

Also, I would like to keep using the users table for clients/customers and keep the auth_user for users of /admin... unless my thinking is wrong on this.

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

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

关于Django:加密密码到遗留(不是auth_user)表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41498730/

相关文章:

Django REST 框架 : list of different serizalized objects?

python -Django : Page Not found

python - ElasticSearch term suggest on analyzed field 不返回任何建议

ruby-on-rails - Rails Admin - 不支持的字段范围

c++ - OpenSSL AES 加密错误

python - 具有永久重定向或在数据库上存储 slug 的动态 slug

postgresql - POSTGIS "ST_Contains"返回空查询

ruby-on-rails - 即使使用 sudo,如何拒绝访问 postgres 目录?

c - 在 OpenSSL 中使用 ECDSA 签署消息

javascript - 最终 block 未正确填充,在 JavaScript 中的 AES ECB 解密期间使用了错误 key