2014-04-30 3 views
0

Salut. J'essaie de créer un programme capable de créer des utilisateurs, puis de les connecter. Une fois que vous êtes connecté, vous pouvez changer votre mot de passe. Ce que je n'arrive pas à comprendre, c'est comment l'obtenir pour changer votre mot de passe après vous être connecté, en utilisant seulement votre ancien mot de passe. Je peux le faire fonctionner en entrant le nom de votre compte, mais ce n'est pas le point. Effectuez l'une d'entre vous avez une idée de la façon de résoudre ce problème, je suis ouvert aux suggestions :)Gestion de compte utilisant json

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() 

Un exemple d'un fichier de compte « { « halo »: « molly »} »

Répondre

0

La modification minimale consisterait à enregistrer l'utilisateur actuellement connecté dans une variable globale dans Old_User(). Ensuite, lorsque Change_Passwd est appelé, vous pouvez revenir à cette variable pour déterminer l'utilisateur avec lequel vous traitez. Voici les modifications que vous apporteriez à Old_User. Je vais laisser les modifications à Change_Passwd à vous de mettre en œuvre.

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. 
     ... 

Je devrais ajouter que vous seriez mieux servi en utilisant des classes pour cela. Essayer de maintenir l'état (comme qui est l'utilisateur actuel) en utilisant des variables globales n'est pas très évolutif et peut être assez confus. Avoir des classes représentant les utilisateurs et les sessions actives faciliterait les choses.

Questions connexes