Python Login Script; Nombres de usuario y contraseñas en un archivo separado

Estoy buscando ayuda para obtener mi script de Python para imitar una función de inicio de sesión, mientras que las credenciales se almacenan en un archivo separado.

Conseguí que funcionara con un nombre de usuario y una contraseña codificados, y también se lee en un archivo, pero me está costando encontrar la forma de vincularlos.

Cualquier asistencia es apreciada.

El script de Python es el siguiente:

print "Login Script" import getpass CorrectUsername = "Test" CorrectPassword = "TestPW" loop = 'true' while (loop == 'true'): username = raw_input("Please enter your username: ") if (username == CorrectUsername): loop1 = 'true' while (loop1 == 'true'): password = getpass.getpass("Please enter your password: ") if (password == CorrectPassword): print "Logged in successfully as " + username loop = 'false' loop1 = 'false' else: print "Password incorrect!" else: print "Username incorrect!" 

Encontré esto en otro lugar que me ayudó a leer el archivo e imprime el contenido del archivo de texto, pero no estoy seguro de cómo avanzar a partir de esto:

 with open('Usernames.txt', 'r') as f: data = f.readlines() #print data for line in data: words = line.split() 

El archivo de texto contiene los nombres de usuario y las contraseñas en un formato de: Test: TestPW Chris: ChrisPW Admin: AdminPW con cada credencial en una nueva línea.

Como dije anteriormente, cualquier ayuda es apreciada! Gracias.

Podría comenzar a tener un diccionario de nombres de usuario y contraseñas:

 credentials = {} with open('Usernames.txt', 'r') as f: for line in f: user, pwd = line.strip().split(':') credentials[user] = pwd 

Entonces tienes dos pruebas fáciles:

 username in credentials 

le dirá si el nombre de usuario está en el archivo de credenciales (es decir, si es una clave en el diccionario de credentials )

Y entonces:

 credentials[username] == password 
 import hashlib ,os resource_file = "passwords.txt" def encode(username,password): return "$%s::%s$"%(username,hashlib.sha1(password).hexdigest()) def add_user(username,password): if os.path.exists(resource_file): with open(resource_file) as f: if "$%s::"%username in f.read(): raise Exception("user already exists") with open(resource_file,"w") as f: print >> f, encode(username,password) return username def check_login(username,password): with open(resource_file) as f: if encode(username,password) in f.read(): return username def create_username(): try: username = add_user(raw_input("enter username:"),raw_input("enter password:")) print "Added User! %s"%username except Exception as e: print "Failed to add user %s! ... user already exists??"%username def login(): if check_login(raw_input("enter username:"),raw_input("enter password:")): print "Login Success!!" else: print "there was a problem logging in" while True: {'c':create_username,'l':login}.get(raw_input("(c)reate user\n(l)ogin\n------------\n>").lower(),login)() 

No debes usar 2 bucles. Simplemente le diría a la persona que adivinó el nombre de usuario. Solo digo. utilizar un bucle.

También revise mi página repl.it it para un mejor sso que pueda tener como 100 personas a la vez sin ninguna otra cosa si las declaraciones

Aquí está: https://repl.it/@AmazingPurplez/CatSSO

Tiene errores Fue desarrollado solo por mí, así que + rep para mí.

  • Rep: Joran Beasley

No se pudo publicar el código aquí debido a “errores de sangría” como Frick it! Pero aun así intentaré una versión más sencilla.

 import getpass username = "username" password = "password" loop = True while loop == True: userinput = input("question") passinput = getpass.getpass("question") if userinput == username and passinput == password: statements break else: statements 
 username = raw_input("Username:") password = raw_input("Password:") if password == "CHANGE" and username == "CHANGE": print "Logged in as CHANGE" else: print "Incorrect Password. Please try again."