目录

账号封禁的规划

账号封禁的流程图​编辑

实际场景中如何应用

使用mysql作为计数器

使用redis作为计数器


账号封禁的规划

账号封禁的流程图

实际场景中如何应用

使用mysql作为计数器

  • 本人的具体实现是基于tornado框架,django,flask其接口方法也差不多
  • tornado是一个采用异步非阻塞的方式来写的接口
  • 其中登录成功后传的的token,请看博主主页的详细介绍哦
  • 使用mysql作计数操作会比redis麻烦许多,并且需要单独定义一张表来存放每次输错的时间,来判断是否超过规定时间,并且计数,但是redis就不会涉及到时间减法问题,redis本身就可以设置过期删除,而mysql需要写手动删除(代码删除)
  • mysql是普遍运用的,redis对性能有一定要求,存储在磁盘上,会有一定的消耗
    # 计数器表(这是在tornado框架中定义的表)
    class CheckNumModel(peewee.Model):id = peewee.IntegerField(primary_key = True,unique=True,constraints=[peewee.SQL('AUTO_INCREMENT')])#入库时间create_time = peewee.DateTimeField(default=datetime.datetime.now(),help_text='入库时间')email = peewee.CharField(null=False,unique=True)num = peewee.IntegerField(null=False,default=0) class Meta:# 声明表名db_table = 'check_num'

# 登录页面
class UserLogin(BaseHandler):async def get(self):# 接收参数email = self.get_argument('email', None)password = self.get_argument('password', None)print('获取到的邮箱和密码:',email,password)#判断是否获取到数据if not all([email,password]):self.finish({'msg':'邮箱或验证码为空','errcode':0})  try:# 获取计数器(mysql版本)try:#从数据库表中查询num_mysql =await self.application.objects.get(CheckNumModel.select().where(CheckNumModel.email==email))except Exception as e:num_mysql = None# 拿到计数器if  num_mysql:# 获取当前时间now_time =  int(time.time())# 获取首次输错密码的时间点num_time =  num_mysql.create_time.timestamp()print(now_time,num_time)# 减法运算mytime = now_time - num_timeprint(mytime)if  mytime  <=  30:# 判断计数器if  num_mysql.num>5:self.finish({'msg':'您已经超过错误次数','errcode':3})# 超过30秒从数据库删除else:# 清除计数器await self.application.objects.delete(num_mysql)# 查找用户是否存在user = await self.application.objects.get(UserModel.select().where((UserModel.email==email )  & (UserModel.password ==  make_password(password)) ))# 判断账号是否激活if  user.state == 0:self.finish({'msg':'账号尚未激活','errcode':400})else:# 生成jwtmyjwt=MyJwt()self.finish({"msg":"邮箱已激活 登陆成功", 'email':user.email,"errcode": 1,'token':myjwt.encode({'id':user.id})})except  Exception  as e:# print('登录失败的原因:',e)self.finish({'msg':'用户名或密码错误','errcode':2}            # mysql逻辑if num_mysql:# 错误次数累加num_mysql.num += 1# 修改数据库await self.application.objects.update(num_mysql)# 第一次输错,插入计数器else:await   self.application.objects.create(CheckNumModel,email=email,num=1)

使用redis作为计数器

class UserLogin(BaseHandler):async def get(self):# 接收前端传递的参数email = self.get_argument('email', None)password = self.get_argument('password', None)print('获取到的邮箱和密码:',email,password)#判断是否获取到数据if not all([email,password]):self.finish({'msg':'邮箱或验证码为空','errcode':0})  try:# 获取计数器(redis)num=self.application.redis.get('num_'+email)# 如果计数器存在if num:if  int(num) >= 5:#当然自己在测试接口时,时间就可以设的短一些self.finish({'msg':'您已经超过错误次数,请30分钟后尝试','errcode':3})# 查找用户是否存在user = await self.application.objects.get(UserModel.select().where((UserModel.email==email )  & (UserModel.password ==  make_password(password)) ))# 判断账号是否激活if  user.state == 0:self.finish({'msg':'账号尚未激活','errcode':400})else:# 生成jwtmyjwt=MyJwt()self.finish({"msg":"邮箱已激活 登陆成功", 'email':user.email,"errcode": 1,'token':myjwt.encode({'id':user.id})})except  Exception  as e:# print('登录失败的原因:',e)self.finish({'msg':'用户名或密码错误','errcode':2})# redis版本# 如果计数器存在if  num:# 对错误次数进行累加操作self.application.redis.incr('num_'+email)# 计数器不存在,则说明是用户第一次输错else:# 30s以内,输错做累加self.application.redis.setex('num_'+email,30,1)

账号或密码多次输入错误,进行账号封禁相关推荐

  1. 实现用户名密码登陆,输入错误3次后锁定用户

    正在看<老男孩高薪必备]Python高级运维编程实战精品入门进阶>上面的习题: 实现用户名密码登陆,输入错误3次后锁定用户 自己写的,代码很烂但是总的来说实现了. #!/usr/bin/e ...

  2. twine upload设置账号和密码,避免每次都输账号和密码

    如果使用twine经常上传文件,且不想每次都输入账号和密码的话可以使用-u和-p参数来指定你的PyPI账号及密码,如: twine upload -u coco56 -p password dist/ ...

  3. iPhone开机密码提示你输入错误,你千万要这样做,不看后悔吧!

    最近,我的iPhone6 由于修改密码,导致里面的资料全没了.通讯录.照片.微信聊天记录.短信.备忘录,损失惨重,人也上火了.为了不让同一个坑绊倒两次,也不让别人绊倒,我总结了下面的,希望对大家有帮助 ...

  4. java登录密码错误锁定账号

    //密码输入错误锁定账号 存入redisif (!tbUser.getLoginPass().equalsIgnoreCase(encryption)) {//判断redis是否存在key,因为我们这 ...

  5. webstorm中git密码输入错误,重置问题

    webstorm中git密码输入错误,重置问题 今天遇到了一个问题. 因为我比较习惯使用webstorm编辑器,特别喜欢直接用里面的git工具. 当从远程仓库fetch下来代码时,提示输入用户名密码. ...

  6. 开机密码锁定计算机,win10设置开机密码输入错误锁定电脑的方法

    如今电脑已经成为了我们生活中的一部分,无论是工作还是生活都需要使用电脑.为了保护自己电脑中的隐私或是重要的文件,一般用户会给自己的电脑设置密码.但是不知道大家是否发现,在输入密码的时候即使错误我们也可 ...

  7. python输入错误提示再次输入_Python实现用户登录并且输入错误三次后锁定该用户...

    实现用户登录并且输入错误三次后锁定该用户 我的测试环境,win7,python3.5.1 提示输入用户名,和密码 判断是否被锁定 判断用户名和密码是否匹配 输入错误三次,账号被锁定 思路 代码块 na ...

  8. 设计登录页面测试用例,页面包括账号、密码和验证码,账号字符长度小于20,密码字符长度小于30,验证码数字和字母组合,长度为4

    1. 正确输入账号.密码和验证码,登录成功. 2. 账号为空,应提示"请输入账号". 3. 账号长度为19个字符,符合要求. 4. 账号长度为20个字符,符合要求. 5. 账号长度 ...

  9. Wireshark分析明文账号、密码登录

    目录 一.准备 Wireshark 二.Wireshark配置准备 1.打开Wireshark,选择捕获接口. 2.配置显示过滤器 三.分析明文账号.密码 1.打开需要使用明文账号密码登录的网站进行登 ...

最新文章

  1. python对文件的读写正确操作方式
  2. JavaScript引擎大战:Google提出StrongMode和SoundScript议案,增强V8性能
  3. Tomcat6.0.13下配置Tomcat Administration Web Application
  4. linux 查找大文件
  5. centos6.0下ffmpeg的安装编译经历
  6. python 换脸 github_人脸识别和换脸相关深度学习开源项目github汇总
  7. 浅谈Opencl之Image和Buffer 区别
  8. iOS软件开发架构理解
  9. 2021 年 Angular vs. React vs. Vue 前端框架对比
  10. c1flexGrid 在单元格中显示图片, 及行号
  11. Java-----Excel转HTML
  12. linux 生成bmp,linux下生成bmp图片的测试程序
  13. VMware15pro安装Windows7虚拟机详细教程
  14. 1.maya基本操作
  15. 海外几大移动游戏市场,各自有什么特点?如何选择正确的营销方式?
  16. win11如何右键如果没有.txt文件,如何出现.txt文件
  17. 每天温习一个JS方法之Array.flat方法 第六天
  18. filco的pin码_一把强行帮你退烧的键盘 plum niz atom66静电容
  19. 人民网_领导留言板data2021年-2022年
  20. MicroSoft word Excel 软件提示登录

热门文章

  1. 服务器系统病毒的来源,服务器中病毒的症状是什么?
  2. SAS EG ERROR:******引用越过文件结尾的页
  3. 一双皮鞋的AI改造计划——白洞战报
  4. 生活随记 - 2020国庆第六天
  5. 软件定义存储(SDS)的定义及其分类
  6. 注意力机制 - Transformer
  7. ae中用粒子系统做的特效怎么循环
  8. DebitCredit for Mac(个人财务管理软件)
  9. python小游戏毕设 仿八分音符的声控小游戏设计与实现 (源码)
  10. 微信第三方开发者答网友问 微信创业靠谱吗