@Foraho

Как реализовать авторизацию в sql на питон?

Здраствуйте, хочу реализовать авторизацию в SQLite 3 на питон, но не знаю как проверить принадлежит ли пароль к пользователю, если да то пустить в систему, а если нет то отправить сообщение что пароль не верный

import sqlite3
from random import randint

global enter
help = "Command List: /help - Show full list of commands, /new_user - Create new user, /login - Login to user, /casino - Play casino"

global db
global sql

db = sqlite3.connect('data.db')
sql = db.cursor()

sql.execute("""CREATE TABLE IF NOT EXISTS users (
    login TEXT,
    password TEXT,
    birthday_year BEGIN,
    birthday_month BEGIN,
    user_birthday_day BEGIN,
    gender TEXT,
    cash BEGIN
)""")

def login():
    user_login = input("Enter login: ")
    user_password = input("Enter password: ")

    sql.execute(f"SELECT login FROM users WHERE login = '{user_login}'")
    if sql.fetchone() is None:
        print("This user does not exist")
        main()
    elif sql.execute(f"SELECT login FROM users WHERE login = '{user_login}'") != sql.fetchone() is None:
        print('1')

def reg():
        user_login = input("Enter login: ")
        user_password = input("Enter password: ")
        user_birthday_year = int(input("Enter birthday year: "))
        user_birthday_month = int(input("Enter birthday month: "))
        user_birthday_day = int(input("Enter birthday day: "))
        user_gender = input("Enter gender (f-female or m-male): ")
        if user_birthday_year > 1897 and user_birthday_year < 2022:
            if user_birthday_month > 0 and user_birthday_month < 13:
                if user_birthday_day > 0 and user_birthday_day < 32:
                    if user_gender == 'f' or user_gender == 'm':
                        abc(user_login, user_password, user_birthday_year, user_birthday_month, user_birthday_day,
                            user_gender)
        else:
            print('Carefully check the correctness of the data you entered')
            reg()

db.commit()
def main():
    print(help)
    enter = input("Enter the command: ")
    if enter == '/help':
        print(help)
    elif enter == '/new_user':
        reg()
    elif enter == '/login':
        login

def abc (user_login, user_password,user_birthday_year, user_birthday_month, user_birthday_day, user_gender):
    sql.execute(f"SELECT login FROM users WHERE login = '{user_login}'")
    if sql.fetchone() is None:
        sql.execute(f"INSERT INTO users VALUES (?, ?, ?, ?, ?, ?, ?)", (user_login, user_password, user_birthday_year, user_birthday_month, user_birthday_day, user_gender, 0))
        db.commit()
        print('You have successfully registered')
        main()
    else:
        print('Such a record already exists')
        main()

main()
  • Вопрос задан
  • 4222 просмотра
Пригласить эксперта
Ответы на вопрос 2
Вот этот код работает можешь оптимизировать его под себя
я не нашел ответ в интернете искал около 2-ух дней
здесь регистрация и авторизация!

import sqlite3

db = sqlite3.connect("data.db")
sql = db.cursor()
sql.execute("""CREATE TABLE IF NOT EXISTS "users" (
    "username"  TEXT,
    "password"  TEXT)""")
db.commit()


def reg():
    username = input("username>> ")
    password = input("password>> ")
    sql.execute(f"SELECT username, password FROM users WHERE username = '{username}' AND password = '{password}'")

    if sql.fetchone() is None:
        sql.execute(f"INSERT INTO users VALUES (?,?)", (username, password))
        db.commit()
        print('You have registered')
        login()
    else:
        print('Такая запись уже существует')
        for i in sql.execute('SELECT * FROM users'):
            print(i)

def login():
    username = input("username>> ")
    password = input("password>> ")
    a = sql.execute(f"SELECT username, password FROM users WHERE username = '{username}' AND password = '{password}'")
    db.commit() 
    if not sql.fetchone():
        print("Нет такой записи")
        for i in sql.execute('SELECT * FROM users'):
            print(i)
        reg()
    else:
        print('Welcome')
    
login()
Ответ написан
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
global db
global sql
???

1) Не используйте f-строки!
sqlite3 — DB-API 2.0 interface for SQLite databases
606075235fbcb461753844.gifКонкретно обратите внимание на:
Usually your SQL operations will need to use values from Python variables. You shouldn’t assemble your query using Python’s string operations because doing so is insecure; it makes your program vulnerable to an SQL injection attack (see https://xkcd.com/327/ for humorous example of what can go wrong).


2) Обычно, при регистрации пароль хешируется и добавляется в базу хеш, а не пароль. Потом при авторизации пароль опять хешируется и этот хеш сверяется с хешем в базе.

Что конкретно у вас не получается? Сверить значение со значением в базе?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы