Неудачный вход возвращает 200 Ok

Я делаю POST запрос к /session.json с телом:

{
  "login": "skroob",
  "password": "12345",
  "authenticity_token": "..."
}

При успешном входе статус равен 200, а в ответе возвращается JSON с данными пользователя. При неудачном входе в ответе приходит JSON вида:

{"error": "Неверное имя пользователя, email или пароль"}

но статус всё ещё 200. Это баг? Должен ли статус при неудачном входе быть >= 400, чтобы указывать на ошибку?

1 лайк

:thinking:

Возможно. Я бы, наверное, выбрал 401.

Но это также коды состояния HTTP для соединений HTTP-клиентов; я думаю, что эта тонкость приводит к решениям вроде возврата 200 (“ваш POST выполнен успешно, вот обратная связь”).

Сам не уверен. :slight_smile:

1 лайк
1 лайк

Я понимаю логику возврата 200 при неудачном входе: это означает, что вход не удался «успешно», а не «неудачно». :upside_down_face:

4 лайка

Имейте в виду, что это также своего рода «фишка», так как она сбивает с толку ботов, пытающихся войти в систему.

Я колеблюсь насчёт изменения этого. Может быть…

6 лайков

Я не прошу изменений. Я хотел получить дизъюнктивный ответ: либо изменение, либо подтверждение того, что такое поведение намеренное — и теперь у меня это есть. Спасибо!

3 лайка