You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于JSON文件实现用户名与对应密码的登录验证

修复JSON验证登录的逻辑错误:用户名与密码不匹配也通过验证的问题

当前你的登录逻辑核心问题是把用户名和密码的验证完全分开了——只要输入的用户名存在于用户列表、密码存在于密码列表,哪怕两者不属于同一个用户,也能通过验证。要解决这个问题,必须先定位到用户名对应的具体用户信息,再验证输入的密码是否和该用户的密码一致。

修正步骤与代码实现

首先需要正确读取JSON文件中的用户数据,并建立用户名到用户详情的映射,这样能快速找到指定用户的密码。修改后的完整代码如下:

import json

def login():
    # 读取JSON账户数据
    with open('accounts.json', 'r') as f:
        data = json.load(f)
    account_details = data['account_details']
    # 建立用户名到用户信息的映射字典,方便快速查找
    user_map = {user['Username']: user for user in account_details}

    # 用户名验证流程
    valid_username = False
    login_username = input("Enter your username: ")
    username_tries = 0
    while not valid_username:
        if login_username in user_map:
            valid_username = True
            print("Valid username")
        else:
            print("Invalid username entered")
            username_tries += 1
            if username_tries >= 5:
                print("Username entered wrong too many times.")
                exit()
            login_username = input("Re-enter your username: ")
    
    # 密码验证流程:基于已验证的用户名获取对应密码
    valid_password = False
    target_user = user_map[login_username]
    login_password = input("Enter your password: ")
    password_tries = 0
    while not valid_password:
        if login_password == target_user['Password']:
            valid_password = True
            print("Valid password")
        else:
            print("Invalid password entered")
            password_tries += 1
            if password_tries >= 5:
                print("Password entered wrong too many times.")
                exit()
            login_password = input("Re-enter your password: ")
    
    # 登录成功
    if valid_username and valid_password:
        print("Granted Access!")
        print(f"Welcome {login_username}! ")

if __name__ == "__main__":
    login()

关键修改说明

  • 建立用户映射字典:用user_map = {user['Username']: user for user in account_details}把用户名和对应的完整用户信息绑定,避免单独维护用户名列表和密码列表,从根源上解决两者不关联的问题。
  • 密码验证逻辑修正:不再检查输入的密码是否存在于所有密码的集合中,而是直接和当前验证通过的用户名对应的密码做比对,确保用户名和密码属于同一用户。
  • 优化输入流程:先完成用户名的验证,再要求输入密码,符合正常登录流程逻辑。
  • 修正错误提示:原代码中密码重试次数过多的提示文案错误写成了用户名相关,现已修正。

原accounts.json文件无需修改

{
    "account_details": [
        {
            "Username": "testing1892437",
            "Password": "testing123",
            "Email": "testing1239807@gmail.com",
            "Token": "EZEEPO5A4Y"
        },
        {
            "Username": "iasodlfj123",
            "Password": "amandsf",
            "Email": "ammaisdlkjufghbaf@gmail.com",
            "Token": "CAFI7NEUR4"
        }
    ]
}

内容的提问来源于stack exchange,提问作者Aman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:45:37