|
1 | | -1. Архитектура |
| 1 | +# auth-api |
| 2 | + API сервиса аутентификации и авторизации в приложение Твой ФФ! |
2 | 3 |
|
3 | | -Для добавления методов авторизации используется плагинная архитектура. Это сделано для того, чтобы очень быстро, практически не меняя существующий код внедрять новые методы авторизации. Новые методы внедряются с помощью наследованния от метакласса AuthMethod. Все остальное сделано по обычным паттернам. |
| 4 | +## Запуск |
4 | 5 |
|
5 | | -2. Регистрация через email |
| 6 | +1) Перейдите в папку проекта |
6 | 7 |
|
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 | +``` |
8 | 14 |
|
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 | +``` |
10 | 23 |
|
11 | | - Если пользователь зарегестрирован. Ему отправляется письмо для подтверждения почты, где есть ссылка, переходя нна которую происходит подтверждение. |
| 24 | +## ENV-file description |
12 | 25 |
|
13 | | - 2. Успешно - 200 |
14 | | - |
15 | | - Если пользщователь уже регестрировался, но не подтвердил свою почту. Ему отправляется повторное письмо, где есть новый линк. |
| 26 | +DB_DSN=postgresql://admin:admin@localhost:5432/? |
| 27 | +EMAIL_PASS= |
| 28 | +EMAIL= |
| 29 | +HOST= |
16 | 30 |
|
17 | | - 3. AlreadyExists - 409 |
| 31 | +--- |
18 | 32 |
|
19 | | - Если пользователь уже зарегистрироваля и подтвердил почту. |
| 33 | +## Сценарий использования |
| 34 | +### Что надо сделать чтобы зарегистрировать пользователя через email |
20 | 35 |
|
21 | | - 4. ObjectNotFound - 404 |
| 36 | +1. Дернуть ручку `POST /email/registrate` . Вы передаете `{email: "", password: ""}` |
| 37 | +2. На почту приходит письмо с линком на `GET /email/approve?token='...'`, если по ней перейти то почта будет подтверждена и регистрацию можно считать завершенной. |
22 | 38 |
|
23 | | - Если указано для какого пользователя добавить метод регистрации и этого пользователя не существует. |
| 39 | +### Что надо сделать чтобы залогиниться через email |
24 | 40 |
|
25 | | - 5. SessionExpired - 403 |
| 41 | +1. Дернуть ручку `POST /email/login`. там всего один вариант логина, никуда не денетесь |
| 42 | +2. Вам придет токен, сохраняйте его кууда нибудь, срок действия ограничен. |
26 | 43 |
|
27 | | - Если указано для какого пользователя добавить метод регистрации, указана его сессия, которая, в свою очередь, протухла. |
| 44 | +### Забыли пароль |
28 | 45 |
|
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 | +### Смена пароля |
30 | 51 |
|
31 | | -3. Логин через email. |
| 52 | +1. Если пароль не забыт, а просто надо его поменять. Тогда в `POST /email/reset/password/request` передается токен авторизации, в теле вы передаете `{email: "", password: "", new_password: ""}` |
| 53 | +2. Отправляете запрос и всё, пароль изменен, вам придет письмо с уведомлением о смене пароляю |
32 | 54 |
|
33 | | -Чтобы залогиниться надо дернуть ручку email/login. Туда передается email, password. Что может быть, если дернуть ручку: |
| 55 | +### Что надо сделать, чтобы поменять почту |
34 | 56 |
|
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