Как стать автором
Обновить

Комментарии 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

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

Если имя пользователя и пароль правильные, то я вызываю функцию 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')

Интересно узнать как у вас в итоге получилось...

Все замечательно работает! Но есть вопрос: как для пользователя сообщить, что бы он допустил ошибку в том или ином поле не русском или ином языке, который он предпочитает использовать?

Если речь идёт о конкретном пользовале, то в 21 главе будет реализована система личных сообщений и уведомлений пользователей, либо можете добавить ещё одно поле в модель пользователя, на подобии как поле "О себе", и вывести его в в шаблоне base.html.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории