[英]Login system on Python
这是一个真正的新手问题。 因此,我正在尝试在Python中编写一个登录系统,要求输入用户名(仅提供1个用户名),如果键入的用户名不正确,则说明用户名无效,如果正确,则要求输入用户名。密码,如果密码不正确,则表示密码错误,然后再次要求输入密码;如果输入的密码正确,则仅表示已登录。
到目前为止,我能够做的是:
a = 0
while a < 1:
print ('Username:')
name = input()
if name != 'Teodor': #checks the username typed in
print ('Invalid username.')
continue
else:
print ('Hello, Teodor.')
print ('Password:')
a = a + 1
password = input()
b = 0
while b < 1:
if password != '1234': #checks the password typed in
print ('Password incorrect.')
b = b + 1
continue
else:
print ('Password correct.')
print ('Logging in...')
print ('Logged in.')
break
尽管用户输入了错误的密码,但它确实执行了我不希望执行的操作,但它确实可行。 如果用户输入了错误的密码,我希望程序告诉用户“错误的密码”并再次要求输入,但是它没有这样做,它只会打印“错误的密码”,然后终止。 不过,它在要求用户名的那部分工作100%。
这是我想念的一件事。 我怎样才能解决这个问题? 非常感谢!
每当用户输入错误的密码时,语句b = b + 1
就会终止while
循环。 确实没有必要。
您也可以将密码提示包装在while
循环中:
while input("Enter password") != "1234":
print("Password incorrect")
检查密码时不需要+ 1
。 那只是使您脱离循环。
相反,请尝试:
if password != '1234': #checks the password typed in
print ('Password incorrect.')
continue
一个更好的解决方案是使用布尔值,而不是使用+1
和<1
来打破循环。 样品:
userCorrect = False
while not userCorrect:
print ('Username:')
name = raw_input()
if name != 'Teodor': #checks the username typed in
print ('Invalid username.')
continue
else:
print ('Hello, Teodor.')
print ('Password:')
userCorrect = True
password = raw_input()
passCorrect = False
while not passCorrect:
if password != '1234': #checks the password typed in
print ('Password incorrect.')
print ('Password:')
password = raw_input()
else:
passCorrect = True
# Since password is correct, continue.
print ('Password correct.')
print ('Logging in...')
print ('Logged in.')
输入无效密码后,此循环( while b < 1:
)终止。
看着
> if password != '1234': #checks the password typed in
> print ('Password incorrect.')
> b = b + 1
> continue
代码行b = b + 1
使得while b < 1:
时为假,从而结束了循环并终止了程序。
正如其他人已经指出,问题出在b = b + 1
打破了条件while b < 1:
使其不要问另一个密码。 简单删除行b = b + 1
使用getpass()
而不是input()
来避免“过肩”攻击。 您的密码输入被屏蔽为****
恩。
from getpass import getpass
password = getpass()
Cryptify
嗯,除了听起来很酷之外,这并没有真正阻止某些人修改代码以跳过密码阶段,但是可以阻止他们看到代码中的原始密码。
这篇文章使用passlib
有一个很好的例子
这有助于保护非唯一/敏感的密码(例如您用于5倍其他密码的密码,或者您母亲的娘家姓……请勿将其拖入其中)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.