Python本地登录注册系统登录验证始终提示账户无效问题排查
问题复现
我开发了一款模拟本地登录/注册流程的程序,首先会提示用户选择注册或登录操作:若选择注册,用户按要求格式输入用户名和密码后,信息会被写入文件存储。
若选择登录,用户需输入「用户名/密码」格式的凭证,程序预期逻辑为:若输入内容存在于存储文件中则提示账户有效,反之提示账户无效。
但当前实际运行时,即便用户输入的凭证确实已存储在文件中,程序仍始终输出账户无效的提示,以下是登录功能的代码片段:
elif sol == "l": os.system("clear") print("You have chosen to login.") time.sleep(2) os.system("clear") datasearch = input("What is your username and password?(username/password): ") with open ("user_database.txt", "r") as searchdata: if datasearch in os.linesep: os.system("clear") print("This is a valid account!") time.sleep(3) os.system("clear") quit() else: os.system("clear") print("This is not a valid account!") time.sleep(3) os.system("clear")
错误原因
- 未读取文件内容:代码仅打开了存储账户信息的文件,没有执行读取操作,完全没有获取到已存储的账户数据
- 校验逻辑完全错误:
datasearch in os.linesep的判断逻辑是检查用户输入的凭证是否属于系统换行符,和预期的「校验凭证是否存在于文件中」逻辑完全不符,因此无论输入什么内容都不会触发校验成功的分支
修复后的代码
elif sol == "l": os.system("clear") print("You have chosen to login.") time.sleep(2) os.system("clear") datasearch = input("What is your username and password?(username/password): ") # 读取文件所有内容,匹配存储时的格式,去除换行符干扰 with open ("user_database.txt", "r") as f: account_list = [line.strip() for line in f.readlines()] if datasearch in account_list: os.system("clear") print("This is a valid account!") time.sleep(3) os.system("clear") quit() else: os.system("clear") print("This is not a valid account!") time.sleep(3) os.system("clear")
额外优化建议
- 避免明文存储密码,可选择哈希加密后存储敏感信息
- 增加输入格式校验,提前拦截不符合「用户名/密码」格式的输入
内容的提问来源于stack exchange,提问作者user16933349
相关产品推荐
相关产品推荐

