Flask: Создание root-пользователя в flask-security и установка хешированного пароля

Вкратце:
Flask — micro web framework. По сути, тонкая обёртка вокруг wsgi-сервера werkzeug.

Flask-Security — расширение (extension) для flask, которое реализует возможность аутентификации и авторизации («входа на сайт», другими словами — логина), регистрации пользователей. Flask-Security сам по себе использует другие сторонние расширения для реализации нужного функционала (например: flask-login для логина, flask-wtf для обработки форм).

Задача: во время инициализации БД создать пользователя с паролем. Примерно как это делает Django при первом syncdb с подключенным приложением django.contrib.auth.

Проблемы и решение:

Хранить пароли в открытом виде не модно да и не безопасно. Пароль требуется защитить понятным для flask-security методом.

Процедура сокрытия пароля не прозрачна на уровне ORM (в данном случае sqlalchemy).

Для инициализации БД воспользуемся расширением flask-script, которое позволяет просто реализовать CLI (command line interface — интерфейс командной строки) для некоторых действий в нашем приложении.

Версия 1: Только хардкор, только хардкод!

Запуск: python manage.py initdb

Минусы: пароль захардкожен. Flask-Security будет работать только если в настроках установлен plaintext в качестве формата паролей.

Версия 2: Убираем хардкод

Меняем:

На:

Да, всё так элементарно, но сразу почему-то в голову не пришло.

Версия 3: солим и хэшируем

Добавляем импорт:

Меняем:

На:

Версия 4: DRY, less harcode

Убираем остальной хардкод, используем DRY (don’t repeat yourself). В итоге всё выглядит так:

Выглядит вполне симпатично. Мои познания flask ограничены 3 вечерами, но, надеюсь, в данном примере нет каких-то очевидных нелепостей.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: