Запрос
POST /login
Параметры
login - логин пользователя
password - пароль пользователя
Ответ
# при успешной авторизации
{
auth: Boolean, # состояние авторизации юзера на сайте (да/нет), 1 - при успешной авторизации
user_id: Int, # id юзера
user_login: String, # логин юзера
X-Session: String, # код сессии (например: "Z5RrvohMG2v56xph"),
}
# при неудаче
{
auth: Boolean, # 0 - при отсутствии авторизации
error_msg: String, # сообщение о причине отказа в авторизации
}
Возможные варианты error_msg
:
Пустое значение у логина или пароля
Авторизация с этими логином и паролем не удалась
При успешной авторизации будет выдан уникальный код-ключ сессии (токен) "X-Session", который нужно будет добавлять в хедер при запросах к авторизованным ресурсам сайта (В запросах к json общего доступа, без авторизации, этот хиддер игнорируется):
X-Session: Z5RrvohMG2v56xph
Другой вариант получение ключа сессии - через cookie:
Также - при успешной авторизации POST /login
отдается хэдер Set-Cookie с куком fl_s. (Если он отсутствует при ответе, значит, авторизация не удалась. Значения куки fl_s
и X-Session
- одинаковы)
Пример:
Set-Cookie: fl_s=Z5RrvohMG2v56xph; expires=Mon, 30 Jul 2019 06:46:11 GMT; domain=.fantlab.ru;
Срок валидности данного кука равен 1 году. Для подписи запросов следует подставлять его в хэдер Cookie. В данном случае
fl_s=Z5RrvohMG2v56xph
Запрос
GET /login
Параметры
Заголовок *X-Session* (или кук *fl_s*) c кодом авторизированной сессии.
Пример
/login - текущий статус авторизации на ФЛ (ваш)
Ответ
{
auth: Boolean, # состояние авторизации юзера на сайте (да/нет)
}
Примечание: в состоянии авторизации дополнительно отдаются поля user_id
, user_login
и X-Session
(как в примере овтета на POST выше).
Примечания про работы с cookie в Android: При авторизации следует отключить автоматический редирект в HttpClient'е, иначе произойдет перенаправление на главную сайта, а там хэдера Set-Cookie уже нет. В Retrofit это можно сделать при первоначальном конфигурировании:
httpClientBuilder.setFollowRedirects(false)
В Fuel чуть сложнее:
FuelManager.instance.apply {
removeAllResponseInterceptors()
addResponseInterceptor(validatorResponseInterceptor(200..299))
}