You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
flask-login!
Тебе нужно реализовать аутентификацию простейшего типа: просто по id.
Задача:
GET /index - который возвращает имя студента, если он авторизован и "auth required" если пользователь неавторизован
GET /login/<int:student_id> - логинит пользователя
GET /logout - разлогинивает пользователя
Как делать:
Прежде всего, поставить flask-login, указав его в requirements.txt
Настроить сессии. Сессия - термин для "устойчивого соединения". В контексте всех этих авторизационных и аутентификационных дел это штука, которая позволяет "запомнить" пользователя до какого-то момента и не запрашивать у него данные при каждом действии. Есть разные способы запоминания: по IP, по кукам, по IP+кукам, по токенам... Сессии должны лежать в каком-нибудь хранилище: будь-то база данных, файлик на диске или выделенная структура в памяти. flask-login использует модуль flask-sessions, который (вроде бы) по умолчанию хранит сессии на диске. Он их шифрует ключем, который нужно указать при создании фласк-приложения: app.secret_key = "your_secret_key"
Дальше нужно выполнить несколько обязательных требований для работы фласк-логина.
4.1. Фласк-логин оперирует абстрактным "юзером", к которому у него есть несколько требований: это поля is_authenticated, is_active, is_anonymous и метод get_uid() - возвращающий строковое представление уникального идентификатора пользователя. Можно написать все эти поля/методы самому, а можно просто отнаследовать нашего Student не только от db.Model, но и от UserMixin (кстати, код у него очень простой. Это даст нашей модели Student'а возможность использоваться в качестве логин-модели.
4.2. Нужно реализовать user_loader, специальную callback функцию, которая должна возвращать экземпляр логин-модели если такой пользователь есть, и None, если его нет. Обрати внимание, на вход подаётся id в строковом виде, а наша модель Student'а кушает int'овый id.
Реализуй /index (см. задание). Текущего пользователя можно получить через current_user (from flask_login import current_user), проверить его аутентификацию - через поле is_authenticated. Если всё реализовано правильно, то на этом этапе страничка всегда должна возвращать auth required
Реализуй /login/<id>. Для того, чтобы залогинить и создать сессию пользователя используй функцию login_user (from flask_login import login_user). На вход она принимает объект пользователя (экземпляр Student). Его можно получить самому, либо используя выше написанный user_loader. На этом этапе, единожды придя на /login/<id> - /index всегда будет возвращать имя студента. Проверь работает ли это, если открыть-закрыть браузер и перезапустить приложение.
Реализуй /logout. Используй logout_user. Эта функция уже ничего не принимает, и просто делает разлогин текущему пользователю :). Потести как всё это добро работает вместе
The text was updated successfully, but these errors were encountered:
flask-login!
Тебе нужно реализовать аутентификацию простейшего типа: просто по id.
Задача:
GET
/index
- который возвращает имя студента, если он авторизован и "auth required" если пользователь неавторизованGET
/login/<int:student_id>
- логинит пользователяGET
/logout
- разлогинивает пользователяКак делать:
app.secret_key = "your_secret_key"
4.1. Фласк-логин оперирует абстрактным "юзером", к которому у него есть несколько требований: это поля
is_authenticated
,is_active
,is_anonymous
и методget_uid()
- возвращающий строковое представление уникального идентификатора пользователя. Можно написать все эти поля/методы самому, а можно просто отнаследовать нашего Student не только от db.Model, но и от UserMixin (кстати, код у него очень простой. Это даст нашей модели Student'а возможность использоваться в качестве логин-модели.4.2. Нужно реализовать
user_loader
, специальную callback функцию, которая должна возвращать экземпляр логин-модели если такой пользователь есть, и None, если его нет. Обрати внимание, на вход подаётся id в строковом виде, а наша модель Student'а кушает int'овый id./index
(см. задание). Текущего пользователя можно получить черезcurrent_user
(from flask_login import current_user
), проверить его аутентификацию - через поле is_authenticated. Если всё реализовано правильно, то на этом этапе страничка всегда должна возвращатьauth required
/login/<id>
. Для того, чтобы залогинить и создать сессию пользователя используй функцию login_user (from flask_login import login_user
). На вход она принимает объект пользователя (экземпляр Student). Его можно получить самому, либо используя выше написанныйuser_loader
. На этом этапе, единожды придя на/login/<id>
-/index
всегда будет возвращать имя студента. Проверь работает ли это, если открыть-закрыть браузер и перезапустить приложение./logout
. Используй logout_user. Эта функция уже ничего не принимает, и просто делает разлогин текущему пользователю :). Потести как всё это добро работает вместеThe text was updated successfully, but these errors were encountered: