# 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`