【问题标题】:Account management using json使用 json 进行账户管理
【发布时间】:2014-06-17 06:25:03
【问题描述】:

嗨。我正在尝试制作一个能够创建用户然后登录的程序。登录后,您可以更改密码。我似乎无法弄清楚的是如何在您登录后仅使用您的旧密码来更改您的密码。我可以通过输入您的帐户名称来使其工作,但这不是重点。 你们有没有人知道如何解决这个问题,我愿意接受建议:)

import json

with open("login_data.txt", "r") as login_file:
    try:
        users = json.load(login_file)
    except:
        users = {}

status = ""

def Display_Menu():

    status = input("Are you a registered user? (y/n)? Press q to quit: ")
    if status == "y":
        Old_User()
    elif status == "n":
        New_User()
    elif status == "passwd":
        Change_Passwd()
    elif status == "q":
        skriva = open("login_data.txt", "w")
        json.dump(users, skriva)
    return status

def New_User():

    Create_Login =input("Create login name: ")
    if Create_Login in users:
        print ("Login name already exist!")
    else:
        Create_Password =input("Create password: ")
        users[Create_Login] = Create_Password
        print("New User created!")

def Old_User():

    login =input("Enter login name: ")
    Password =input("Enter password: ")

    if login in users and users[login] == Password:

        print("Login successful!")
        print(users[login])

        status = input("Wanna quit, change pass, och logout?")       
        if status == "passwd":
            Change_Passwd()
        elif status == "logout":
            Display_Menu()
        elif status == "q":
            skriva = open("login_data.txt", "w")
            json.dump(users, skriva)
        return status

    else:
        print("User doesn't exist or wrong password!")

def Change_Passwd():

    oldpass =input("Old password: ")

    if oldpass in users:
        Create_Password =input("New password: ")
        users[oldpass] = Create_Password

        if Create_Password == input("Confirm password: "):
            print("Password changed!")
        else:
            print("User authorization failure")
            users[create_Login] = oldpass
    else:
        print ("No password match!")


while status != "q":            
    status = Display_Menu()

账户文件示例“{“halo”:“molly”}”

【问题讨论】:

    标签: python json login passwords account


    【解决方案1】:

    最小的改变是将当前登录的用户保存到 Old_User() 中的全局变量中。然后,当调用 Change_Passwd 时,您可以返回到该变量以确定您正在处理的用户。这是您对 Old_User 所做的更改。我会将 Change_Passwd 的更改留给您来实施。

    current_user = None # Declare global variable for saving logged in user
    def Old_User():
        global current_user  # Indicate that we're going to modify the global variable in the local scope
    
        login =input("Enter login name: ")
        Password =input("Enter password: ")
    
        if login in users and users[login] == Password:
    
            print("Login successful!")
            print(users[login])
            current_user = login  # Save the logged in user.
            ...
    

    我还应该补充一点,使用类会更好地为您服务。尝试使用全局变量来维护状态(比如当前用户是谁)的可扩展性不是很高,并且很快就会让人感到困惑。拥有代表用户和活动会话的类会让事情变得更容易。

    【讨论】:

      猜你喜欢
      • 2018-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-09
      • 1970-01-01
      • 2020-05-17
      • 2020-02-14
      • 2010-10-08
      相关资源
      最近更新 更多