На пятнадцатой неделе курса мы научимся добавлять в веб-приложение регистрацию, вход и выход пользователя. Разберёмся с сессиями, хешированием паролей и основами безопасности при работе с формами. Это критически важные аспекты для любого серьёзного веб-приложения.
- **Аутентификация** — проверка личности пользователя (вход в систему)
- **Авторизация** — определение прав пользователя (доступ к страницам и функциям)
Flask использует cookies для хранения идентификатора сессии. Пример:
```python```
from flask import session
app.secret_key = "секретный_ключ"
@app.route("/login", methods=["POST"])
def login():
session["user_id"] = 1
return "Вы вошли"
@app.route("/logout")
def logout():
session.pop("user_id", None)
return "Вы вышли"
Хранить пароли в открытом виде — опасно. Нужно использовать хеш-функции:
```python```
from werkzeug.security import generate_password_hash, check_password_hash
hashed = generate_password_hash("mypassword")
check = check_password_hash(hashed, "mypassword") # True
```python```
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
name = request.form["username"]
pw = request.form["password"]
user = db.execute("SELECT * FROM users WHERE name = ?", (name,)).fetchone()
if user and check_password_hash(user["password"], pw):
session["user_id"] = user["id"]
return "Успешный вход"
return "Ошибка"
Для защиты от подделки запросов используют CSRF-токены.
Flask-WTF добавляет такую защиту по умолчанию.
```bash```
pip install flask-wtf
```python```
@app.route("/profile")
def profile():
if "user_id" not in session:
return redirect("/login")
return "Профиль"
Flask-Login — расширение, упрощающее управление пользователями и сессиями.
```bash```
pip install flask-login
Позволяет автоматически защищать маршруты, сохранять вход, помнить пользователей и многое другое.
1. Реализуйте регистрацию и вход пользователя с хешированием пароля.
2. Создайте защищённую страницу, доступную только после входа.
3. Настройте Flask-Login в вашем проекте.