'Would like yo get advice for attached python program. Can we use dictionary as database for very basic login system program?
I am trying to create login system program, where "name", "email" and "password" has to be taken fron user as input and save as Dictionary in text file. I am stuck on how to assign each dicitionary a variable. Also, once the user comes again after registration, there should be password check done against the dictionary text file which i am not sure. Pls look into the below code and assist?
#! usr/bin/python3
# Login project sample
import json
def login():
print("Welcome to login system")
New_user = input("Are you a new user? type yes or no: ")
if New_user == "yes":
a = {}
Name = input("Enter your name: ")
Email = input("Enter the email: ")
Password = input("Enter the password: ")
a["Name"] = (Name)
a["Email"] = (Email)
a["Password"] = (Password)
print(a)
with open("login.txt", "a+") as f:
f.seek(0)
data = f.read(100)
if len(data) > 0:
f.write("\n")
x = str(range(1,100))
f.write(x + "=" + json.dumps(a))
x = x + 1
else:
b={}
def login1():
Email = input("Enter the email: ")
Password = input("Enter the password: ")
b["Email"] = (Email)
b["Password"] = (Password)
with open("login.txt", "r") as r:
f.seek(0)
i = range(100)
if i.keys() in b.keys() and i.value() in b.value():
print("Login is successfull")
else:
login1()
login()
Solution 1:[1]
I would advise against 1) using dictionary as a way of persistently storing authentication data, 2) storing users password directly in such database.
If you don't really need to use a dictionary then some simple solution like sqlite (.db file instead of .txt file) with some hashing library can help you achieve your goal. The code could look something like that:
import sqlite3
import hashlib
def create_table():
query = "DROP TABLE IF EXISTS login"
cursor.execute(query)
conn.commit()
query = "CREATE TABLE login(name VARCHAR DEFAULT '', email VARCHAR NOT NULL UNIQUE, password VARCHAR NOT NULL)"
cursor.execute(query)
conn.commit()
def add_user(name, email, raw_password):
query = "INSERT INTO login (name, email, password) VALUES (?, ?, ?)"
hashed_password = hashlib.sha256(raw_password.encode('utf-8')).hexdigest()
cursor.execute(query, (name, email, hashed_password))
conn.commit()
def check_user(name, email, raw_password):
query = 'SELECT * FROM login WHERE name = ? AND email = ? AND password = ?'
hashed_password = hashlib.sha256(raw_password.encode('utf-8')).hexdigest()
cursor.execute(query, (name, email, hashed_password))
result = cursor.fetchone()
conn.commit()
print('[DEBUG][check] result:', result)
return result
def login():
answer = input("Login (Y/N): ")
if answer.lower() == "y":
name = input("Name: ")
email = input("Email: ")
password = input("Password: ")
if check_user(name, email, password):
print("Email correct!")
print("Password correct!")
print("Logging in...")
else:
print("Something wrong")
# --- main ---
conn = sqlite3.connect("users.db")
cursor = conn.cursor()
create_table() # use only once
name = input("New name: ")
email = input("New email: ")
password = input("New password: ")
add_user(name, email, password)
login()
cursor.close()
conn.close()
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
