Комментарии 7
>>> u = User(username='susan', email='susan@example.com')
>>> u.set_password('mypassword')
>>> u.check_password('anotherpassword')
False
>>> u.check_password('mypassword')
True
что бы этот код пошел, его нужно предварить импортом:
>>> from app.models import User
Если имя пользователя и пароль правильные, то я вызываю функцию
login_user()
, которая импортирована из Flask-Login. Эта функция зарегистрирует пользователя как вошедшего в систему
Id пользователя при этом возьмётся из объекта User, который в свою очередь возьмётся из базы. Чтобы потом использовать этот Id в load_user. Я правильно понимаю?
А как быть, если базы нет? Например, использую авторизацию Active Directory? Где хранить вошедших пользователей, чтобы загружать их потом в load_user? И где брать этот Id?
Если вы не планируете хранить какие-то данные по каждому пользователю, а просто предоставлять равный обезличенный доступ к приложению после авторизации, то база данных действительно не нужна, но класс пользователя должен быть точно, для простоты вы можете так же наследовать класс UserMixin, но переопределить метод get_id()
, который должен что-то возвращать вам, хотя бы просто значение True
, аналогично с загрузкой пользователя, вы можете передавать любое значение в load_user()
главное чтобы была согласованность, а возвращаемым объектом был экземпляр пользователя.
Но авторизация через Active Directory не исключает наличие базы данных у приложения, вы таким образом просто перекладываете проверку подлинности учётных данных пользователя на другую службу.
Я сейчас решаю подобную проблему. Корпоративное приложение (вот оно Active Directory), решили написать на связке питон+фласк. Большинство рецептов в интернете начинается с этого самого - запакуем пароли в base64 (или, если сайт продвинутый, то положим какой-нибудь md5 от пароля), заведем в mySQL список пользователей, запросим окошко в браузере для аутентификации.... Всё это подразумевает что что у ваше приложение развернуто на каком-то "шарообразном" веб-сервисе... ... в общем в итоге у нас фласк приложение развернуто на IIS, автоматом получаем https/SLL без всяких колдунств с хранением сертификатов (а безопасники с большим скрипом смотрят на выгрузку закрытых ключей от корпоративных ресурсов в непонятные хранилища), сама авторизация тоже на IIS (хоть basic, хоть win, хоть по сертификатам/токенам), а пользователя получаем как username = request.environ.get('REMOTE_USER')
Интересно узнать как у вас в итоге получилось...
Все замечательно работает! Но есть вопрос: как для пользователя сообщить, что бы он допустил ошибку в том или ином поле не русском или ином языке, который он предпочитает использовать?
Мега-Учебник Flask Глава 5: Логины пользователей (издание 2024)