Экран входа в Python - Как проверить пароль из файла json? - PullRequest
0 голосов
/ 26 сентября 2018

Я пишу экран входа в систему, который запрашивает имя пользователя и пароль.Как только у меня будет работать этот экран, я планирую добавить его в начало более крупной программы, над которой я работаю.

Проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что я не смог подтвердить пароль для определенный пользователь.Прямо сейчас программа проверит, существует ли имя пользователя, если оно существует, то проверит, существует ли пароль.Проблема в том, что кто-то может ввести другое имя пользователя и собственный пароль, а затем войти в чужую учетную запись.Безопасность для моей программы не так уж важна (я просто создаю приложение на языке типа Duolingo), но это довольно очевидная проблема, которую я хотел бы выяснить, как ее решить.

from tkinter import *
import json
class LoginFrame(Frame):
    def __init__(self, master):
        super().__init__(master)
        master.title("Login")

        self.label_username = Label(self, text="Username")
        self.label_password = Label(self, text="Password")

        self.entry_username = Entry(self)
        self.entry_username.focus()     #This sets the focus to the username entry box
        self.entry_password = Entry(self, show="*")

        self.label_username.grid(row=0, column=0)
        self.label_password.grid(row=1, column=0)
        self.entry_username.grid(row=0, column=1)
        self.entry_password.grid(row=1, column=1)

        self.login_button = Button(self, text="Login", command=self.Login)
        self.login_button.grid(columnspan=2)

        self.grid()

    def Login(self):
        current_info = open ("C:\\LearningArabic\\LiblibArriby\\Usernames\\usernames.json").read()

        username = self.entry_username.get()
        password = self.entry_password.get()

        if username in current_info:
            print("Test")
            if password in current_info:
                print("Now we're talking")
            else:
                print("Well, you're trying")
        else:       #This section appends the new username and password combo to the json file
            usr = {username: password}
            with open("C:\\LearningArabic\\LiblibArriby\\Usernames\\usernames.json") as a:
                data = json.load(a)

            data.update(usr)

            with open("C:\\LearningArabic\\LiblibArriby\\Usernames\\usernames.json", "w") as a:
                json.dump(data, a)
root = Tk()
lf = LoginFrame(root)
root.mainloop()

Буду признателен за любую помощь, и если есть другие комментарии к коду, пожалуйста, не сдерживайтесь. Я хочу узнать, а не просто получить ответ!

1 Ответ

0 голосов
/ 26 сентября 2018

сохраняя текущий формат файла, я бы просто сделал что-то вроде:

PATH_USERNAMES = "C:/LearningArabic/LiblibArriby/Usernames/usernames.json"

with open(PATH_USERNAMES) as fd:
  current_info = json.load(fd)

username = self.entry_username.get()
password = self.entry_password.get()

if username in current_info:
  saved_password = current_info.get(username, '')
  if password == saved_password:
    print("Password OK")

, но настоятельно рекомендую вам сохранить хешированный пароль и соответствующим образом изменить проверку ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...