Я пытаюсь создать аутентификатор с Python для добавления в другой проект.

Вот мой код:

# User authentication
global authenticated

def checkAuth():
    global authenticated
    authenticated = False
    # User enters their username and password
    username = input("Enter your username: ")
    password = input("Enter your password: ")
    username = username.strip()
    password = password.strip()

    for line in open("users.txt","r").readlines():
        line = line.strip()
        loginInfo = line.split(",")
        print(loginInfo)
        if username == loginInfo[0] and password == loginInfo[1]:
            print("Authorised")
            authenticated = True

isAuth = checkAuth()

if (isAuth):
    input("Authorised \t Press any key to continue: ")
else:
    input("no auth")

Когда я запускаю свой код и ввожу правильное имя пользователя и пароль, оператор if внутри функции checkAuth оценивается как true, но оператор if внизу не получает значение True.

Это две комбинации имени пользователя и пароля в файле users.txt.

файл users.txt

0
Michael Cooper 14 Сен 2018 в 22:07

2 ответа

Лучший ответ

Вам либо нужно сделать if(authenticated), либо вместо установки для параметра authenticated значение true, просто return true. Ваша функция checkAuth() недействительна, поэтому она не имеет возвращаемого значения. Использование глобалов для этого не очень хорошая идея.

Если вы абсолютно уверены, что хотите использовать текстовый файл для этого, попробуйте это:

def isAuthorized():
  username = input("Enter your username: ").strip()
  password = input("Enter your password: ").strip()

  with open("users.txt", "r") as f:
    for line in f:
      loginInfo = line.strip().split(",")
      if username == loginInfo[0] and password == loginInfo[1]:
        return True
    return False

if isAuthorized():
  input("Authorized \t Press any key to continue: ")
else:
  input("no auth")

Использование текстового файла для этого не обеспечивает никакой безопасности, так что имейте это в виду. Проблема с глобальным логическим значением заключается в том, что вы должны сбрасывать его после каждого входа в систему, иначе оно останется верным, даже если указана неверная информация.

5
emsimpson92 14 Сен 2018 в 19:26

Вам нужно вернуть значение из функции checkAuth()

checkAuth()
   ...
   ...
   return authenticated
3
Aron Lawrence 14 Сен 2018 в 19:10