我有一个拥有数千名注册用户的网站。万一有人从我的数据库中窃取了密码,我希望有一个计划 A和一个计划 B。我猜B计划是更改所有用户密码(使用一个小的python脚本和一个随机密码生成器)并将这些新密码通过电子邮件发送给用户。我可以轻松做到这一点。
计划 A(听起来更合适,我不知道该怎么做)将强制用户通过使旧密码过期来创建新密码,这是他们在攻击后第一次访问页面时。
Django有这样的功能吗?怎样才能高效、快速地完成?
注意:目前我的用户/用户配置文件模型在设计时并未考虑到这种情况。
我有一个拥有数千名注册用户的网站。万一有人从我的数据库中窃取了密码,我希望有一个计划 A和一个计划 B。我猜B计划是更改所有用户密码(使用一个小的python脚本和一个随机密码生成器)并将这些新密码通过电子邮件发送给用户。我可以轻松做到这一点。
计划 A(听起来更合适,我不知道该怎么做)将强制用户通过使旧密码过期来创建新密码,这是他们在攻击后第一次访问页面时。
Django有这样的功能吗?怎样才能高效、快速地完成?
注意:目前我的用户/用户配置文件模型在设计时并未考虑到这种情况。
您应该做的第一件事是停用所有用户,使他们无法登录。一种方法是使用set_unusable_password()
. 这将使所有密码无效;或者你可以设置is_active
为False
. 这将禁用用户批发。
接下来,您可以让用户重置他们的密码。也有内置的助手和表单。
在我看来,您应该选择 B 计划。检查管理命令:
from django.core.management.base import NoArgsCommand
from django.contrib.auth.models import User
class Command(NoArgsCommand):
help = _('Change password of all users.')
def handle_noargs(self, **options):
users = User.objects.all()
for user in users:
# generate random password
random_pwd = 'some random password'
user.set_password(random_pwd)
user.save()
# send email to user