用户登录认证

需求

  • 要求用户输入账号密码进行登陆
  • 用户账号信息保存在文件内
  • 用户密码输入错误三次锁定用户,下次再登录,检测是这个被锁定的用户,则依然不允许登录,提示已被锁定

思路

  • 需要从文件中读取用户信息,保存为字典,key=用户名,value=用户信息;
  • 输入用户名,在字典中查找是否存在该用户名,若存在再判断该用户是否锁定,若锁定则不允许登录,提示已被锁定;
  • 输入密码,查询字典判断密码是否正确,密码正确则登录成功,否则继续输入,直到输错3次提示将被锁定,修改用户状态为锁定状态写入文件;

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
accounts = {}  # 设置一个空字典,用于保存从文件中获取到的信息
f1 = open('user.db', 'r') # 读取文件
for line in f1:
line = line.strip().split(',') # 将每行内容以列表形式返回
accounts[line[0]] = line # 例如'Rohn': ['Rohn', 'ab123', '0']的形式存入字典

while True:
user = input('username:').strip()
if user not in accounts:
print('该用户未注册...')
continue
elif accounts[user][2] == '1':
print('该用户已被锁定,请联系管理员...')
continue
count = 0
while count < 3: # 判断密码,密码输错3次被锁定
passwd = input('password:'.strip())
if passwd == accounts[user][1]:
print(f'Welcome {user}!')
exit('bye...')
else:
print('Wrong password, please try again...')
count += 1
if count == 3: # 当次数等于3时,修改用户状态为1
print(f'输错了{count}次密码,用户{user}将被锁定...')
accounts[user][2] = '1'
f2 = open('user.db', 'w')
for user, val in accounts.items(): # 写入文件
line = ','.join(val) + '\n'
f2.write(line)
f2.close()
exit('bye...')