连续三次登陆失败锁定账户

连续三次登录失败锁定账户

需求说明:1、输入用户名2、认证成功,提示登录成功,欢迎信息3、登录失败连续三次,提示失败,并退出程序

备注:1、users_info是存放用户名及其密码的文件,格式: 用户名 密码, 之间用空格隔开2、locked_file是存放被锁定的用户id的文件,默认为空,格式为: 用户名3、程序会对users_info里的合法用户id进行判断,若连续三次输入错误,提示失败并退出4、程序会对正确的用户名后的密码进行验证,输入三次密码错误,锁定该用户名,并退出

思路导图:


一、代码如下

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author: davie
# file three_login.py
"""
需求说明:
1、输入用户名
2、认证成功,提示登录成功,欢迎信息
3、登录失败连续三次,提示失败,并退出程序

备注:
1、users_info是存放用户名及其密码的文件,格式: 用户名 密码, 之间用空格隔开
2、locked_file是存放被锁定的用户id的文件,默认为空,格式为: 用户名
3、程序会对users_info里的合法用户id进行判断,若连续三次输入错误,提示失败并退出
4、程序会对正确的用户名后的密码进行验证,输入三次密码错误,锁定该用户名,并退出
"""
import os,sys,getpass   # 导入os,sys,getpass 模块
os.system(‘clear‘)      # 清屏操作
count = 0               # 用户输入循环次数
while count < 3:        # 只要用户登录失败不超过3次,就就行循环执行
    username = input("请输入您的用户名: ").strip()   # 输入用户名
    # 打开locked_file文件,权限是读写,并赋值给locked_f变量
    locked_f = open(‘locked_file‘,mode=‘r+‘,encoding=‘utf-8‘)
    # 使用.readlines()的方法逐行读取locked_file文件,并赋值给locked_list变量
    locked_list = locked_f.readlines()

    # 使用for循环读取locked_file的内容
    for locked_line in locked_list:
        # 使用.strip()的方法去掉换行符
        locked_line = locked_line.strip(‘\n‘)
        # 判断用户输入的信息是否在locked_file中存在
        if username == locked_line:
            print("用户:\033[31m%s\033[0m 已经锁定,请联系您的管理员" % username) # 如果存在则打印
            sys.exit(1) # sys模块的exit()方法表示退出
    with open("users_info",mode="r",encoding="utf-8") as user_f: # 只读模式打开文件
        user_list = user_f.readlines()  # 使用.readlines()方法逐行读取,赋值给变量

    for user_line in user_list: # 使用for循环读取users_info的内容
        (user,passwd) = user_line.strip(‘\n‘).split()   # 分别获取账号和密码信息
        if username == user:    # 使用if判断用户输入的账号是否在users_info中存在
            p_count = 0               # 输入密码的循环次数
            while p_count <3:         # 循环不超过三次
                password = getpass.getpass("请输入密码: ")  # 使用getpass方法,密码不显示
                if password == passwd:  # 用户名和密码都正确
                    print("\033[36m欢迎您,登陆成功!\033[0m")
                    sys.exit(0)
                else:
                    if p_count != 2:  # p=2时,是最后一次机会
                        print("对不起,\033[31m%s\033[0m的密码错误,请继续输入,你还有\033[31m%d\033[0m次机会"%(username,2-p_count))
                p_count += 1
        else:
            pass    # 用户匹配失败,跳过并继续循环
    else:
        locked_f.write(username + ‘\n‘)
        sys.exit("对不起 \033[31m%s 用户已经被锁定,请联系管理员\033[0m"% username)
    u += 1
else:
    sys.exit("\033[31输入有误,程序退出,请重新输入!\033[0m")
locked_f.close()      # 关闭文件

二、运行结果

[[email protected] ~]$ ll
total 8
-rw-rw-r-- 1 davie davie    0 Mar 23 20:54 locked_file
-rw-rw-r-- 1 davie davie 3312 Mar 23 20:53 three_login.py
-rw-rw-r-- 1 davie davie   30 Mar 23 20:24 users_info
[[email protected] ~]$ cat users_info
u1 123456
u4 123456
u5 123456
[[email protected] ~]$ python3 three_login.py
请输入您的用户名: u1
请输入密码:
对不起,u1的密码错误,请继续输入,你还有2次机会
请输入密码:
对不起,u1的密码错误,请继续输入,你还有1次机会
请输入密码:
对不起 u1 用户已经被锁定,请联系管理员
[[email protected] ~]$
[[email protected] ~]$ cat locked_file
u1
[[email protected] ~]$
[[email protected] ~]$ python3 three_login.py
请输入您的用户名: u2
对不起 u2 用户已经被锁定,请联系管理员
[[email protected] ~]$ ll
total 12
-rw-rw-r-- 1 davie davie    6 Mar 23 21:42 locked_file
-rw-rw-r-- 1 davie davie 3312 Mar 23 20:53 three_login.py
-rw-rw-r-- 1 davie davie   30 Mar 23 20:24 users_info
[[email protected] ~]$ cat locked_file
u1
u2
[[email protected] ~]$ python3 three_login.py
请输入您的用户名: u3
对不起 u3 用户已经被锁定,请联系管理员
[[email protected] ~]$ python3 three_login.py
请输入您的用户名: u4
请输入密码:
欢迎您,登陆成功!
[[email protected] ~]$ 



原文地址:https://www.cnblogs.com/bjx2020/p/8635196.html

时间: 2024-10-13 08:24:18

连续三次登陆失败锁定账户的相关文章

定义有参装饰器为被装饰函数添加认证功能,定义有参装饰器为被装饰函数添加认证功能,三次验证失败锁定用户

#需求:定义有参装饰器为被装饰函数添加认证功能,用户信息的来源可以是文件也可以是ldap # 三次验证失败锁定用户 1 def menu(): 2 #用户交互界面 3 user_name = input("请输入在用户名:") 4 password = input("请输入密码:") 5 return user_name,password #以元组形式返回值 6 ''' 7 alex1 1111 8 alex2 2222 9 egon3 3333 10 ''' 11

centos多次登陆失败锁定

锁定登陆三次密码错误,一般用户锁定30s,root用户锁定60s. 1.判断系统当前是pam_tally2.so 模块还是pam_tally.so 模块 [[email protected] pam.d]# pam pam_console_apply    pam-panel-icon       pam_timestamp_check pamon                pam_tally2 可以判断当前系统是pam_tally2模块 2.查看帮助,了解使用方法 pam_tally2.s

Day5.对文件的增删改查+三次登陆后锁定

作业1:对文件haproxy.conf进行增删改查: haproxy.conf原文件内容如下: global log 127.0.0.1 local2 daemon maxconn 256 log 127.0.0.1 local2 info defaults log global mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms option dontlognull listen stat

如何通过策略设置iNotes尝试几次错误密码登陆后锁定账户

1. 请从Domino Administrator 打开服务器配置文档 -> Security 标签, 在 "Internet Lockout" 区段, 根据您的实际情况把如下选项选择上并填写对应的值 . "Enforce Internet Password Lockout" "Yes" "Log Settings" "Lockouts" "Default Maximum Tries All

python装饰器:实现登录账户三次失败,账户自动锁定

1.定义无参装饰器为被装饰器添加统计运行时间的功能2.定义有参装饰器为被装饰器添加认证功能:用户的信息可以来源于file也可以是ldap,三次验证失败锁定用户 同http://www.cnblogs.com/xuyaping/p/6679305.html,只不过加了装饰器统计时间和认证功能.  

linux系统设置登录失败n次锁定账户:vim /etc/pam.d/system-auth

auth required pam_env.so 登陆后的环境变量 auth sufficient pam_fprintd.so 指纹认证 auth sufficient pam_unix.so nullok try_first_pass 验证用户密码有效性 auth requisite pam_succeed_if.so auth required pam_deny.so auth required pam_tally2.so deny=3 unlock_time=5 even_deny_ro

python实现三次登陆

1 oo=1 2 while oo<=3: 3 pp = 3 - oo 4 ee = input('账号:') 5 rr = input('密码:') 6 if ee=='123' and rr=='123': 7 print('欢迎登陆') 8 break 9 elif oo==3: 10 print('三次登陆失败,关闭!!') 11 break 12 else: 13 print('输入错误,还有'+str(pp)+'次机会') 14 oo+=1 原文地址:https://www.cnbl

5.C#WinForm基础登陆失败三次退出系统

目标: 登陆界面,登陆错误三次退出程序.假设用户名密码是admin.888888,不区分大小写,(易错点:局部变量与类变量) 局部变量每次运行完毕变量的值都会被销毁,下次再运行,会重新初始化.       而类字段,只要是一个对象,那么只要对象不销毁,就会一直保持对象的字段值. 退出程序:this.close();或者Application.Exit(); 文本框的集中模式:Mutiline(多行).PasswordChar(密码) string Datatime().ToString()(+3

完成一个登陆页面。(用户名:F11;密码:123456)。要求用户输入用户 名和密码,验证是否等于正确值。如果等于告知登陆成功,程序结束;否则告 知用户名密码有误。用户三次输入不正确,告知登陆失败,程序结束 。

#include <stdio.h>#include <string.h> /*完成一个登陆页面.(用户名:F11:密码:123456).要求用户输入用户名和密码,验证是否等于正确值.如果等于告知登陆成功,程序结束:否则告知用户名密码有误.用户三次输入不正确,告知登陆失败,程序结束 .*/ void main(){ char username[20]; char password[20]; int i = 0; for(i = 0; i < 3; i++) { printf(