Функция после рекурсии ничего не возвращает (Python)
Функция для авторизации. По задумке, если логин или пароль неверные, то функция уходит в рекурсию и заново спрашивает логин и пароль, пока не будут введены корректные данные. А затем функция возвращает инфу о пользователе.
Если залогиниться с 1 попытки, то функция возвращает кортеж с данными пользователя. Однако, если пройти авторизацию после неудачной попытки, то функция возвращает None.
В чём ошибка? Код прилагаю ниже (это мой первый проект, в стол, про безопасность данных пока не думаем)
2 вопрос: Как происходит авторизация пользователя аля best practices
? Что нужно учитывать, если я бы делал коммерческий проект?
import sqlite3
def user_authorization():
user_name = input('ИМЯ ПОЛЬЗОВАТЕЛЯ: ')
user_pass = input('ПАРОЛЬ: ')
# Подключаемся к БД и вытягиваем всех пользователей
with sqlite3.connect('Databases/some.db') as connection:
cursor = connection.cursor()
try:
with connection:
cursor.execute('SELECT id, name, pass, age, rank FROM Users')
user_list = cursor.fetchall()
except Exception:
print("--- тут какие-то ошибки")
# Если логин есть в БД, то сверяем пароль, в случае успеха отдаём кортеж
# Если не нашли логин или пароль неверный, то уходим в рекурсию
for user in user_list:
if user[1] == user_name and user[2] == user_pass:
print(f'Уровень доступа: {user[4]}')
return user
else:
print('Неверное ИМЯ ПОЛЬЗОВАТЕЛЯ или ПАРОЛЬ!')
user_authorization()
user_info = user_authorization()
print(user_info)
Ответы (1 шт):
Вам нужно в ветке else
не просто вызвать функцию еще раз, а вернуть результат ее выполнения:
else:
print('Неверное ИМЯ ПОЛЬЗОВАТЕЛЯ или ПАРОЛЬ!')
return user_authorization()