我其实正在这样做的过程中.您需要三个组件:用户配置文件(如果您的站点上尚未使用),中间件组件和pre_save信号.

我的代码是在一个名为“帐户”的应用程序.

# myproject/accounts/models.py

from django.db import models

from django.db.models import signals

from django.contrib.auth.models import User

class UserProfile(models.Model):

user = models.ForeignKey(User, unique=True)

force_password_change = models.BooleanField(default=False)

def create_user_profile_signal(sender, instance, created, **kwargs):

if created:

UserProfile.objects.create(user=instance)

def password_change_signal(sender, instance, **kwargs):

try:

user = User.objects.get(username=instance.username)

if not user.password == instance.password:

profile = user.get_profile()

profile.force_password_change = False

profile.save()

except User.DoesNotExist:

pass

signals.pre_save.connect(password_change_signal, sender=User, dispatch_uid='accounts.models')

signals.post_save.connect(create_user_profile_signal, sender=User, dispatch_uid='accounts.models')

首先,我们创建一个带有外键的UserProfile给User.如果要强制他们更改密码,force_password_change boolean将正如其名称所述一样设置为true.你可以在这里做任何事情.在我的组织中,我们还选择每90天实施强制性更改,因此我还有一个DateTimeField,用于存储用户上次更改密码的时间.然后,在pre_save信号中设置password_changed_signal.

其次,我们有create_user_profile_signal.这主要是为了完整性而添加.如果您刚刚将用户配置文件添加到项目中,则需要一个post_save信号,每次创建一个UserProfile时都会创建一个UserProfile.这完成了这项任务.

第三,我们有password_changed_signal.这是一个pre_save信号,因为在该过程的这一点上,用户表中的实际行没有被更新.因此,我们可以访问以前的密码和要保存的新密码.如果两者不匹配,那意味着用户已经更改了密码,然后我们可以重新设置force_password_change布尔值.这将是重点,您也可以在此处处理您添加的任何其他内容,例如设置前面提到的DateTimeField.

最后两行将两个功能附加到其适当的信号.

如果还没有,您还需要将以下行添加到项目的settings.py(更改应用程序标签和型号名称以匹配您的设置):

AUTH_PROFILE_MODULE = 'accounts.UserProfile'

涵盖了基础知识.现在我们需要一个中间件组件来检查我们的force_password_change标志的状态(以及任何其他必要的检查).

# myproject/accounts/middleware.py

from django.http import HttpResponseRedirect

import re

class PasswordChangeMiddleware:

def process_request(self, request):

if request.user.is_authenticated() and \

re.match(r'^/admin/?', request.path) and \

not re.match(r'^/admin/password_change/?', request.path):

profile = request.user.get_profile()

if profile.force_password_change:

return HttpResponseRedirect('/admin/password_change/')

这个非常简单的中间件挂钩进入页面加载过程的process_request阶段.它检查1)用户已经登录,2)他们正在尝试访问管理员中的一些页面,3)他们正在访问的页面不是密码更改页面本身(否则,你会得到一个无限循环的重定向).如果所有这些都为真,并且force_password_change标志已设置为True,则将用户重定向到密码更改页面.在他们更改密码(触发前面讨论的pre_save信号)之前,他们将无法在别的地方导航.

最后,您只需要将这个中间件添加到项目的settings.py(再次根据需要更改导入路径):

MIDDLEWARE_CLASSES = (

# Other middleware here

'myproject.accounts.middleware.PasswordChangeMiddleware',

)

python配置文件密码管理_python – 可以在django管理员中实现“下次登录时更改密码”类型功能吗?...相关推荐

  1. linux下次登录强制更改密码,如何强制用户在Linux上的下次登录时更改密码

    当你使用默认密码创建用户时,你必须强制用户在下一次登录时更改密码. 当你在一个组织中工作时,此选项是强制性的.因为老员工可能知道默认密码,他们可能会也可能不会尝试不当行为. 这是安全投诉之一,所以,确 ...

  2. Exchange2010SP1配置OWA下次登录时更改密码提醒

    在Exchange2010安全管理下,一般首次创建的用户账号的密码均为统一的,为防止其他用户登录自己的账户会在创建账户的同时勾选"用户下次登录时需更改密码"选项.但在Exchang ...

  3. linux强制用户改密码,如何在Linux中强制用户在下次登录时更改密码?

    由于安全方面的考虑,系统中的用户需要定期更新其密码.在本文中,我们将看到如何强制用户下次登录系统时更改其密码. 列出用户 首先让我们看一下系统中可用的用户.$ cut -d: -f1 /etc/pas ...

  4. linux新用户登陆密码,如何强制Linux用户在第一次登录时更改初始密码?

    在多用户Linux环境下,创建使用某个随机默认密码的用户帐户是标准做法.之后在成功登录后,新用户可以将默认密码更改成自己的密码.出于安全方面的原因,常常建议"迫使"用户在第一次登录 ...

  5. linux 密码修改下次,问题:如何强制用户在下次登录Linux时更改密码

    当你使用默认密码创建用户时,你必须强制用户在下一次登录时更改密码.当你在一个组织中工作时,此选项是强制性的.因为老员工可能知道默认密码,他们可能会也可能不会尝试不当行为,看到下图会不会有为用户担心的感 ...

  6. 强制用户在下次登录Linux时更改密码

    这个非常简单,有2个命令可以实现,一个是chage,一个是passwd,下面我简单介绍一下: 这里为了方便演示过程,新创建一个Jack用户用于测试,命令"useradd Jack" ...

  7. 用localStorage实现登录时记住密码的功能

    用localStorage实现登录时记住密码的功能 HTNL代码片段 <el-input v-model="ruleForm.user" placeholder=" ...

  8. Web项目,要求:保存用户名和密码在Cookie中,下次登录不再重新输入

    设计一个实现登录功能的Web项目,要求:保存用户名和密码在Cookie中,下次登录不再重新输入 var cookie = {};//设置 cookie.SetCookies=function(name ...

  9. 对于AES和RSA算法的结合使用以及MD5加盐注册登录时的密码加密

    RSA和AES结合使用 接上篇的RSA和AES算法加密之后,AES对称算法对数据量大的加密比较快,而RSA公私钥加密的话会影响加密效率,但是AES的加密与解密的密钥是一致的,导致密钥不能外泄,密钥在网 ...

最新文章

  1. python selenium自动化(三)Chrome Webdriver的兼容
  2. docker版本Mysql安装
  3. LintCode 两两交换链表中的节点
  4. C do...while 循环
  5. Bootstrap 不可编辑的控件
  6. php测试系统登录超时,thinkphp后台检测用户登录超时的实现方法
  7. jsp内置对象*response
  8. [RN] React Native 定义全局变量
  9. java实现lru缓存_Java中的LRU缓存实现
  10. 对称加密算法之Java SM4算法应用 附可用工具类
  11. 串口485接法图_RS485接线的正确原理图
  12. 南京大学计算机考研经验分享,南京大学计算机考研经验 分(范文).docx
  13. 计算机主机的税收,税控电脑
  14. html 横屏滚动字幕,手机知识:手机横屏滚动字幕
  15. 微信公众号开通留言功能条件有哪些?
  16. python实现Excel邮件合并
  17. Pandas+随机森林数模实战日记
  18. MT7686芯片资料手册
  19. jq获取span标签的赋值和取值
  20. 真免费的电脑屏幕录制软件推荐:低调奢华有内涵的超级录屏软件了解下

热门文章

  1. python螺旋打印二维数组_Python使用迭代器打印螺旋矩阵的思路及代码示例
  2. oracle共享时监听,Oracle监听---共享连接参数配置介绍
  3. java实现选项卡定时轮播_原生js面向对象编程-选项卡(自动轮播)
  4. python训练数据集_python – 如何训练大型数据集进行分类
  5. php 教程 字符联接,PHP字符串的连接_PHP教程
  6. 皮一皮:高考考了 692 分想当程序员的女生
  7. 皮一皮:P没P图?傻傻分不清...
  8. Redis的持久化开启了RDB和AOF下重启服务是如何加载的?(10个人9个回答错误)
  9. Fastjson 1.2.68版本反序列化漏洞分析篇
  10. 面试归来,我有一个重要发现……