Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Простейшая аутентификация #9

Open
b0g3r opened this issue Aug 17, 2017 · 0 comments
Open

Простейшая аутентификация #9

b0g3r opened this issue Aug 17, 2017 · 0 comments

Comments

@b0g3r
Copy link
Member

b0g3r commented Aug 17, 2017

flask-login!
Тебе нужно реализовать аутентификацию простейшего типа: просто по id.

Задача:
GET /index - который возвращает имя студента, если он авторизован и "auth required" если пользователь неавторизован
GET /login/<int:student_id> - логинит пользователя
GET /logout - разлогинивает пользователя

Как делать:

  1. Прежде всего, поставить flask-login, указав его в requirements.txt
  2. Настроить сессии. Сессия - термин для "устойчивого соединения". В контексте всех этих авторизационных и аутентификационных дел это штука, которая позволяет "запомнить" пользователя до какого-то момента и не запрашивать у него данные при каждом действии. Есть разные способы запоминания: по IP, по кукам, по IP+кукам, по токенам... Сессии должны лежать в каком-нибудь хранилище: будь-то база данных, файлик на диске или выделенная структура в памяти. flask-login использует модуль flask-sessions, который (вроде бы) по умолчанию хранит сессии на диске. Он их шифрует ключем, который нужно указать при создании фласк-приложения: app.secret_key = "your_secret_key"
  3. Проинициализировать объект flask-login: https://flask-login.readthedocs.io/en/latest/#configuring-your-application
  4. Дальше нужно выполнить несколько обязательных требований для работы фласк-логина.
    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.
  5. Реализуй /index (см. задание). Текущего пользователя можно получить через current_user (from flask_login import current_user), проверить его аутентификацию - через поле is_authenticated. Если всё реализовано правильно, то на этом этапе страничка всегда должна возвращать auth required
  6. Реализуй /login/<id>. Для того, чтобы залогинить и создать сессию пользователя используй функцию login_user (from flask_login import login_user). На вход она принимает объект пользователя (экземпляр Student). Его можно получить самому, либо используя выше написанный user_loader. На этом этапе, единожды придя на /login/<id> - /index всегда будет возвращать имя студента. Проверь работает ли это, если открыть-закрыть браузер и перезапустить приложение.
  7. Реализуй /logout. Используй logout_user. Эта функция уже ничего не принимает, и просто делает разлогин текущему пользователю :). Потести как всё это добро работает вместе
@b0g3r b0g3r added the API label Aug 17, 2017
@b0g3r b0g3r added this to the 0.2: auth, templates, ajax milestone Aug 17, 2017
@b0g3r b0g3r changed the title Авторизация Аутентификация Aug 24, 2017
@b0g3r b0g3r changed the title Аутентификация Простейшая аутентификация Aug 24, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant