Api для управления пользователями и авторизацией.
| Описание запроса | Тип запроса | Пример запроса |
|---|---|---|
| Зарегистрироваться | POST | https://skypro-music-api.skyeng.tech/user/signup/ |
| Войти | POST | https://skypro-music-api.skyeng.tech/user/login/ |
| Получить токен | POST | https://skypro-music-api.skyeng.tech/user/token/ |
| Обновить токен | POST | https://skypro-music-api.skyeng.tech/user/token/refresh/ |
Адрес: https://skypro-music-api.skyeng.tech/user/signup/
Метод: POST
Создает нового пользователя в системе. В теле запроса принимает объект пользователя в формате JSON. Обязательные поля для нового пользвателя email, password и username.
Пример запроса:
fetch("https://skypro-music-api.skyeng.tech/user/signup/", {
method: "POST",
body: JSON.stringify({
email: "gleb@fokin.ru",
password: "Aa12345!!",
username: "gleb@fokin.ru",
}),
headers: {
// API требует обязательного указания заголовка content-type, так апи понимает что мы посылаем ему json строчку в теле запроса
"content-type": "application/json",
},
})
.then((response) => response.json())
.then((json) => console.log(json));Пользователь успешно зарегистрирован, в теле ответа будет объект созданного пользователя:
{
"id": 666,
"username": "gleb@fokin.ru",
"first_name": "",
"last_name": "",
"email": "gleb@fokin.ru"
}Не получилось зарегистрировать пользователя с указанными данными, в теле ответа будет объект объект с ошибками регистрации:
{
"username": ["Пользователь с таким именем уже существует."],
"email": ["Пользователь с таким адрес электронной почты уже существует."],
"password": [
"Введённый пароль слишком короткий. Он должен содержать как минимум 8 символов.",
"Введённый пароль слишком широко распространён.",
"Введённый пароль состоит только из цифр."
]
}Сервер сломался
Адрес: https://skypro-music-api.skyeng.tech/user/login/
Метод: POST
Возвращает данные пользователя по почте и паролю. В теле запроса принимает объект пользователя в формате JSON, обязательные поля email и password.
Пример запроса:
fetch("https://skypro-music-api.skyeng.tech/user/login/", {
method: "POST",
body: JSON.stringify({
email: "gleb@fokin.ru",
password: "gleb@fokin.ru",
}),
headers: {
// API требует обязательного указания заголовка content-type, так апи понимает что мы посылаем ему json строчку в теле запроса
"content-type": "application/json",
},
})
.then((response) => response.json())
.then((json) => console.log(json));Пользователь успешно авторизован, в теле ответа будет объект авторизованного пользователя:
{
"id": 666,
"username": "gleb@fokin.ru",
"first_name": "",
"last_name": "",
"email": "gleb@fokin.ru"
}Запрос составлен некорректно, например не передан пароль, в теле ответа будет расшифровка проблем, такой же как в 400 ответе при регистрации.
Запрос составлен корректно, но не получилось авторизовать пользователя, в теле ответа будет объект с причиной:
{ "detail": "Пользователь с таким email или паролем не найден" }Сервер сломался
Адрес: https://skypro-music-api.skyeng.tech/user/token/
Метод: POST
Эндпоинт создает Access и Refresh JWT токены для пользователя по email и паролю.
Access токен нужен для того чтобы делать авторизованные запросы в апи (например запрос на добавление в "избранные треки"). Access токеном можно пользоваться 200 секунд, потом он "протухает".
Refresh токен не протухает со временем, но может протухнуть если пользователь сменит пароль или нажмет кнопку "выйти на всех устройствах".
Новых Access токен можно получить двумя способами
- (рекомендуемый) Сделать запрос на эндпоинт "Обновить токен", для этого потребуется Refresh токен
- (нерекомендуемый из-за плохого UX и проблем с безопасностью) Сделать повторный запрос на этот эндпоинт, для этого потребуется логин и пароль пользователя
Пример запроса:
fetch("https://skypro-music-api.skyeng.tech/user/token/", {
method: "POST",
body: JSON.stringify({
email: "gleb@fokin.ru",
password: "gleb@fokin.ru",
}),
headers: {
// API требует обязательного указания заголовка content-type, так апи понимает что мы посылаем ему json строчку в теле запроса
"content-type": "application/json",
},
})
.then((response) => response.json())
.then((json) => console.log(json));Логин и пароль верные, сервер возвращает пару access и refresh токенов:
{
"refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY5MTA0NjUzMSwiaWF0IjoxNjkwOTYwMTMxLCJqdGkiOiI2YTFhODg4Zjg5NjY0NjgyYTBmYWYyNjk4ZjZiNjViZSIsInVzZXJfaWQiOjc5Mn0.idHYiVKZqSxPCpNIvYpFgEs6nRTJ3FuPS60RAKV8XC8",
"access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjkwOTYwNDMxLCJpYXQiOjE2OTA5NjAxMzEsImp0aSI6ImE4NDAwZjRkNWUzMTQ4NGJiMzE4YzUzMjE3Y2NhNWZmIiwidXNlcl9pZCI6NzkyfQ.SfvLYWbz72DQqWK7SyF4Yx9Zxx8hGsNxHEcwOU0RTk4"
}Такие же как в эндпоинте "Войти"
Адрес: https://skypro-music-api.skyeng.tech/user/token/refresh/
Метод: POST
Принимает refresh токен, возвращает "живой" acces токен.
Пример запроса:
fetch("https://skypro-music-api.skyeng.tech/user/token/refresh/", {
method: "POST",
body: JSON.stringify({
refresh:
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY5MTA0NjUzMSwiaWF0IjoxNjkwOTYwMTMxLCJqdGkiOiI2YTFhODg4Zjg5NjY0NjgyYTBmYWYyNjk4ZjZiNjViZSIsInVzZXJfaWQiOjc5Mn0.idHYiVKZqSxPCpNIvYpFgEs6nRTJ3FuPS60RAKV8XC8",
}),
headers: {
// API требует обязательного указания заголовка content-type, так апи понимает что мы посылаем ему json строчку в теле запроса
"content-type": "application/json",
},
})
.then((response) => response.json())
.then((json) => console.log(json));Refresh токен валидный, возвращает новый access токен
{
"access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjkwOTcwNzcwLCJpYXQiOjE2OTA5NjAxMzEsImp0aSI6IjcxZjMyZjc5ZGRiMjRhNDE4MGQ5OGVjZTgzMWRkMmYyIiwidXNlcl9pZCI6NzkyfQ.E9SdHw1Aui5HkBIWmO_H0Ibv1-MOgqElLy-BCRiYrrU"
}Refresh токен невалидный, возвращает объект с ошибкой
{
"detail": "Токен недействителен или просрочен",
"code": "token_not_valid"
}В теле запроса не передан refresh токен
Сервер сломался