Урок 9: Регистрация, авторизация и Flask-Login
Проблема: Проходной двор
Посмотрите на наш сайт. Сейчас он похож на дом с открытыми настежь дверями.
- Любой человек может зайти и прочитать посты.
- Любой может написать глупость.
- И самое страшное: любой шутник может нажать "Удалить" и стереть чужую работу.
Нам нужна охрана. Нам нужна система Регистрации и Входа.
Цель урока
Научить сайт узнавать пользователей в лицо и раздавать права доступа.
Часть 1: Аутентификация vs Авторизация

В безопасности есть два похожих слова, которые нужно различать.
- Вопрос: "Ты кто?"
- Проверка: Логин и Пароль.
- Аналогия: Паспортный контроль на границе.
Сегодня мы реализуем и то, и другое.
Часть 2: Безопасность паролей (Мясорубка)

Главное правило веб-разработчика
НИКОГДА. НЕ ХРАНИТЕ. ПАРОЛИ. В ОТКРЫТОМ ВИДЕ. Если хакер украдет вашу базу данных, он увидит пароли всех пользователей ("12345", "qwerty") и взломает их почты.
Решение: Хеширование Мы превращаем пароль в Хеш — набор случайных символов.
- Пароль:
cat123 - Хеш:
pbkdf2:sha256:50$...f9a1
Аналогия: Мясорубка Вы можете прокрутить мясо и получить фарш. Но вы не можете прокрутить фарш назад и получить стейк. При входе на сайт мы берем пароль пользователя, снова крутим через "мясорубку" и сравниваем полученный фарш (хеш) с тем, что лежит в базе.
Часть 3: Инструменты (Flask-Login)
Нам не нужно писать систему входа с нуля. Мы используем библиотеку Flask-Login.
Она берет на себя самую сложную работу:
- Session Management: Запоминает пользователя, чтобы ему не приходилось вводить пароль на каждой странице.
- UserMixin: Добавляет пользователю нужные свойства (активен ли он, вошел ли в систему).
- Current User: Дает нам переменную, в которой всегда лежит "тот, кто сейчас смотрит сайт".
Часть 4: Модель User
Мы создаем новую таблицу в базе данных.
Часть 5: Регистрация и Вход
Весь процесс сводится к двум маршрутам.
- Получаем логин/пароль.
- Превращаем пароль в хеш (
generate_password_hash). - Сохраняем нового юзера в БД.
Часть 6: Защита (Фейс-контроль)

Теперь мы можем повесить "замок" на любые функции. Декоратор @login_required работает как охранник.
Мы защищаем маршруты создания, редактирования и удаления. Читать посты можно всем.
Часть 7: Интерфейс (Jinja2)
Меню сайта должно меняться.
- Гость видит: "Войти", "Регистрация".
- Пользователь видит: "Привет, Вася", "Выйти".
Переменная current_user доступна во всех шаблонах автоматически.
Итоги и Домашнее задание
Резюме урока:
- Хеширование: Храним не пароли, а их "отпечатки".
- Flask-Login: Управляет сессиями пользователей.
@login_required: Защищает маршруты от посторонних.current_user: Позволяет адаптировать верстку под пользователя.
ДЗ: Приватный клуб
- Добавьте на сайт систему регистрации и авторизации.
- Запретите незарегистрированным пользователям создавать и удалять посты.
- Сделайте так, чтобы кнопка "Создать пост" была видна только тем, кто вошел на сайт.