Skip to content

Commit 7525754

Browse files
Update README.md
1 parent c609588 commit 7525754

1 file changed

Lines changed: 43 additions & 64 deletions

File tree

README.md

Lines changed: 43 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,59 @@
1-
1. Архитектура
1+
# auth-api
2+
API сервиса аутентификации и авторизации в приложение Твой ФФ!
23

3-
Для добавления методов авторизации используется плагинная архитектура. Это сделано для того, чтобы очень быстро, практически не меняя существующий код внедрять новые методы авторизации. Новые методы внедряются с помощью наследованния от метакласса AuthMethod. Все остальное сделано по обычным паттернам.
4+
## Запуск
45

5-
2. Регистрация через email
6+
1) Перейдите в папку проекта
67

7-
Чтобы зарегистрироваться через email надо дернуть ручку /email/registrate. Туда передается email и пароль через json. Регистрация через email доступна для незарегестрированных пользователей или для пользователей у которых определены методы регистрации, но не email. Возможны несколько исходов регистрации:
8+
2) Создайте виртуальное окружение командой и активируйте его:
9+
```console
10+
foo@bar:~$ python3 -m venv venv
11+
foo@bar:~$ source ./venv/bin/activate # На MacOS и Linux
12+
foo@bar:~$ venv\Scripts\activate # На Windows
13+
```
814

9-
1. Успешно - 201
15+
3) Установите библиотеки
16+
```console
17+
foo@bar:~$ pip install -r requirements.txt
18+
```
19+
4) Запускайте приложение!
20+
```console
21+
foo@bar:~$ python -m auth_backend
22+
```
1023

11-
Если пользователь зарегестрирован. Ему отправляется письмо для подтверждения почты, где есть ссылка, переходя нна которую происходит подтверждение.
24+
## ENV-file description
1225

13-
2. Успешно - 200
14-
15-
Если пользщователь уже регестрировался, но не подтвердил свою почту. Ему отправляется повторное письмо, где есть новый линк.
26+
DB_DSN=postgresql://admin:admin@localhost:5432/?
27+
EMAIL_PASS=
28+
EMAIL=
29+
HOST=
1630

17-
3. AlreadyExists - 409
31+
---
1832

19-
Если пользователь уже зарегистрироваля и подтвердил почту.
33+
## Сценарий использования
34+
### Что надо сделать чтобы зарегистрировать пользователя через email
2035

21-
4. ObjectNotFound - 404
36+
1. Дернуть ручку `POST /email/registrate` . Вы передаете `{email: "", password: ""}`
37+
2. На почту приходит письмо с линком на `GET /email/approve?token='...'`, если по ней перейти то почта будет подтверждена и регистрацию можно считать завершенной.
2238

23-
Если указано для какого пользователя добавить метод регистрации и этого пользователя не существует.
39+
### Что надо сделать чтобы залогиниться через email
2440

25-
5. SessionExpired - 403
41+
1. Дернуть ручку `POST /email/login`. там всего один вариант логина, никуда не денетесь
42+
2. Вам придет токен, сохраняйте его кууда нибудь, срок действия ограничен.
2643

27-
Если указано для какого пользователя добавить метод регистрации, указана его сессия, которая, в свою очередь, протухла.
44+
### Забыли пароль
2845

29-
При любом исходе возвращает т.н ResponseModel = {status: str, message: str}
46+
1. Дернуть ручку `POST /email/reset/password/request`. Вы передаете `{email: ""}`в нагрузке
47+
2. Вам придет письмо, где будет ссылка НА ФРОНТ(надо сделать это), в ссылке будет reset_token
48+
3. Токен надо передать в ручку `POST /email/reset/password` в заголовках, вместе с `{email: "", new_password: ""}` и пароль будет изменен. email не понадобится после решения #36
49+
50+
### Смена пароля
3051

31-
3. Логин через email.
52+
1. Если пароль не забыт, а просто надо его поменять. Тогда в `POST /email/reset/password/request` передается токен авторизации, в теле вы передаете `{email: "", password: "", new_password: ""}`
53+
2. Отправляете запрос и всё, пароль изменен, вам придет письмо с уведомлением о смене пароляю
3254

33-
Чтобы залогиниться надо дернуть ручку email/login. Туда передается email, password. Что может быть, если дернуть ручку:
55+
### Что надо сделать, чтобы поменять почту
3456

35-
1. AuthFailed - 401
36-
37-
Если логин+пароль неправильный или если пользователь не подтвердил email.
38-
39-
2. Успешно - 200
40-
41-
Возвращает в таком случае объект UserSession = {id: int, token: str, expires: datetime}
42-
43-
4. Смена пароля
44-
45-
Чтобы поменять пароль, существует два варианта: либо поменять его из открытой сессии: нужен email, password, new_password, token, либо в случае забытого пароля можно пользоваться только email.
46-
47-
1. Восстановление без сессии
48-
49-
Надо дернуть ручку /email/password/reset/request, передать туда email. На почту приходит письмо со ссылкой на фронт, где можно поменять пароль, там есть reset_token в ссылке. Далее этот токен надо отправить в ручку /email/password/reset, туда отправляется email, reset_token в хедере, new_password в json.
50-
2. Восстановление с сессией
51-
52-
Надо дернуть ручку /email/password/reset/request, передать туда email, token, password, new_password. Пароль просто поменяется, придет письмо об этом.
53-
54-
3. Ручка /email/password/reset/request может кидать:
55-
1. SessionExpired - 403, если переданная сессия закончилась
56-
2. 401, Auth method restricted for this user
57-
3. AuthFailed - 401, Incorrect password || Registration wasn't completed.
58-
4. 403, Incorrect user session, если переданная сессия не принадлежит юзеру.
59-
5. Успешно - 200, Возвращает ResponseModel
60-
6. 404, Email not found
61-
62-
4. Ручка /email/password/reset может кидать:
63-
1. 404, Email not found
64-
2. 403, Incorrect reset token
65-
3. Успешно - 200, возвращает ResponseModel
66-
5. Смена почты
67-
68-
Чтобы поменять почту, надо дернууть ручку /email/reset/email/request, туда передается новая почта и токен. На новую почту приходит письмо, в котором лежит ссылка на подтверждение новой почты. Ссылка на ручку /email/reset/email.
69-
70-
1. Ручка /email/reset/email/request:
71-
1. 401, Unauthorized, если сессия не передана
72-
2. SessionExpired - 403
73-
3. IncorrectUserAuthType - 403, у юзера нет такого способа входа
74-
4. AuthFailed - 401, Registration wasn't completed
75-
5. 401, Email incorrect
76-
6. Успешно - 200
77-
2. Ручка /email/reset/email
78-
1. AuthFailed - 401
79-
2. 403, Incorrect new email || Incorrect confirmation token
80-
3. Успешно - 200
57+
1. Дернуть ручку `POST /email/reset/email/request`. Всего один вариант, передаете новое мыло в теле `{email: ""}` и токен атворизации в заголовках
58+
2. На почту придет письмо с подтверждением почты, там будет токен подтверждения в query параметрах. Ссылка ведет на ручку GET пока что, но надо переделать, чтобы тоже вела на фронт.
59+

0 commit comments

Comments
 (0)