python配置文件密码管理_python – 可以在django管理员中实现“下次登录时更改密码”类型功能吗?...
我其实正在这样做的过程中.您需要三个组件:用户配置文件(如果您的站点上尚未使用),中间件组件和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管理员中实现“下次登录时更改密码”类型功能吗?...相关推荐
- linux下次登录强制更改密码,如何强制用户在Linux上的下次登录时更改密码
当你使用默认密码创建用户时,你必须强制用户在下一次登录时更改密码. 当你在一个组织中工作时,此选项是强制性的.因为老员工可能知道默认密码,他们可能会也可能不会尝试不当行为. 这是安全投诉之一,所以,确 ...
- Exchange2010SP1配置OWA下次登录时更改密码提醒
在Exchange2010安全管理下,一般首次创建的用户账号的密码均为统一的,为防止其他用户登录自己的账户会在创建账户的同时勾选"用户下次登录时需更改密码"选项.但在Exchang ...
- linux强制用户改密码,如何在Linux中强制用户在下次登录时更改密码?
由于安全方面的考虑,系统中的用户需要定期更新其密码.在本文中,我们将看到如何强制用户下次登录系统时更改其密码. 列出用户 首先让我们看一下系统中可用的用户.$ cut -d: -f1 /etc/pas ...
- linux新用户登陆密码,如何强制Linux用户在第一次登录时更改初始密码?
在多用户Linux环境下,创建使用某个随机默认密码的用户帐户是标准做法.之后在成功登录后,新用户可以将默认密码更改成自己的密码.出于安全方面的原因,常常建议"迫使"用户在第一次登录 ...
- linux 密码修改下次,问题:如何强制用户在下次登录Linux时更改密码
当你使用默认密码创建用户时,你必须强制用户在下一次登录时更改密码.当你在一个组织中工作时,此选项是强制性的.因为老员工可能知道默认密码,他们可能会也可能不会尝试不当行为,看到下图会不会有为用户担心的感 ...
- 强制用户在下次登录Linux时更改密码
这个非常简单,有2个命令可以实现,一个是chage,一个是passwd,下面我简单介绍一下: 这里为了方便演示过程,新创建一个Jack用户用于测试,命令"useradd Jack" ...
- 用localStorage实现登录时记住密码的功能
用localStorage实现登录时记住密码的功能 HTNL代码片段 <el-input v-model="ruleForm.user" placeholder=" ...
- Web项目,要求:保存用户名和密码在Cookie中,下次登录不再重新输入
设计一个实现登录功能的Web项目,要求:保存用户名和密码在Cookie中,下次登录不再重新输入 var cookie = {};//设置 cookie.SetCookies=function(name ...
- 对于AES和RSA算法的结合使用以及MD5加盐注册登录时的密码加密
RSA和AES结合使用 接上篇的RSA和AES算法加密之后,AES对称算法对数据量大的加密比较快,而RSA公私钥加密的话会影响加密效率,但是AES的加密与解密的密钥是一致的,导致密钥不能外泄,密钥在网 ...
最新文章
- python selenium自动化(三)Chrome Webdriver的兼容
- docker版本Mysql安装
- LintCode 两两交换链表中的节点
- C do...while 循环
- Bootstrap 不可编辑的控件
- php测试系统登录超时,thinkphp后台检测用户登录超时的实现方法
- jsp内置对象*response
- [RN] React Native 定义全局变量
- java实现lru缓存_Java中的LRU缓存实现
- 对称加密算法之Java SM4算法应用 附可用工具类
- 串口485接法图_RS485接线的正确原理图
- 南京大学计算机考研经验分享,南京大学计算机考研经验 分(范文).docx
- 计算机主机的税收,税控电脑
- html 横屏滚动字幕,手机知识:手机横屏滚动字幕
- 微信公众号开通留言功能条件有哪些?
- python实现Excel邮件合并
- Pandas+随机森林数模实战日记
- MT7686芯片资料手册
- jq获取span标签的赋值和取值
- 真免费的电脑屏幕录制软件推荐:低调奢华有内涵的超级录屏软件了解下
热门文章
- python螺旋打印二维数组_Python使用迭代器打印螺旋矩阵的思路及代码示例
- oracle共享时监听,Oracle监听---共享连接参数配置介绍
- java实现选项卡定时轮播_原生js面向对象编程-选项卡(自动轮播)
- python训练数据集_python – 如何训练大型数据集进行分类
- php 教程 字符联接,PHP字符串的连接_PHP教程
- 皮一皮:高考考了 692 分想当程序员的女生
- 皮一皮:P没P图?傻傻分不清...
- Redis的持久化开启了RDB和AOF下重启服务是如何加载的?(10个人9个回答错误)
- Fastjson 1.2.68版本反序列化漏洞分析篇
- 面试归来,我有一个重要发现……