# Authentication API
1. POST /v1/login
```json
{
"data": {
"attributes": {
"login": "string",
"password": "string",
"token": {
"value": "string",
"type": 0
},
"appleIdCredential": {
"userId": "string",
"email": "string",
"fullName": {
"namePrefix": "string",
"givenName": "string",
"middleName": "string",
"familyName": "string",
"nameSuffix": "string",
"nickname": "string"
},
"identityToken": "string",
"authorizationCode": "string"
}
},
"type": "authentication"
}
}
```
Available token types:
GOOGLE(0)
Можно послать логин+пароль, либо токен, либо appleIdCredential если пошлешь несколько, то будет использован токен.
При отправке неправильной пары логин+пароль, либо некорректного токена, вопрошающий будет послан.
При отправке корректного токена, но отсутствующего в базе, будет зарегистрирован новый юзер.
"token" - это универсальная сущность для токенов, в частности для Google.
"appleIdCredential" - это чисто для Apple, у них особый путь. Это копия модельки которую клиент получает от эппла https://github.com/tomgilder/flutter_apple_sign_in/blob/master/lib/apple_id_credential.dart
Причём данные email и fullName будут у клиента только при первой аутентификации(так работает Apple), поэтому они nullable.
В ответе придёт серверный токен.
```json
{
"data": {
"id": "id",
"attributes": {
"token": "token"
},
"type": "user"
}
}
```
Или ошибка
```json
{
"errors": [
{
"id": "5fbd6ab4-28be-45ae-ba51-bdf35bc1f853",
"status": null,
"code": "2",
"title": "Failed to authenticate user",
"detail": null
}
]
}
```
Возможные ошибки:
- 2 - Failed to authenticate user
- 3 - Either login+password or token or Apple credentials should be passed.
- 4 - Incorrect authentication token from authentication provider.
- 5 - Could not Sign Up. Unsupported authentication token provider.
2. Все дальнейшие запросы делаешь с токеном
Кладёшь токен, который получил из `/v1/login` в хедер `Authorization`