Size: a a a

Node.js — русскоговорящее сообщество

2020 May 04

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Pavel Shakhov (pongo)
Но ведь при твоём 400 апи все равно верно отрабатывает.
Код приложения ничего не сможет сделать с этой ошибкой, эта ошибка – для разработчика.

Если какой-то required параметр не передан – всё, клиентская часть (фронт) работать не может, это фатальная ошибка. Назад вызывающему нельзя возвращать ничего кроме ошибки, потому что мы так и не поняли, был там юзер в базе, или нет.

Зачем тогда вообще возвращать «graceful»-ошибку? Ну, это правила хорошего тона. В конце концов, может в клиент понадобится вставить костыль, который может слать несколько разных видом одного и того же запроса, например к разным конфликтующим версиям серверного  приложения – тогда, поймав эту ошибку, клиент сможет переотправить запрос другого вида.

Но вообще говоря, в обычных условиях эти ошибки фатальны, и просто должны писаться в лог для отладки.

Во, хороший ответ: «Если ошибка не фатальная, а является ответом на запрос – то статус всё равно 200, а если ошибка не позволяет запросу корректно отработать – то статус нужно вернуть другой».
источник

PS

Pavel Shakhov (pongo... in Node.js — русскоговорящее сообщество
Алексей Клименко
Код приложения ничего не сможет сделать с этой ошибкой, эта ошибка – для разработчика.

Если какой-то required параметр не передан – всё, клиентская часть (фронт) работать не может, это фатальная ошибка. Назад вызывающему нельзя возвращать ничего кроме ошибки, потому что мы так и не поняли, был там юзер в базе, или нет.

Зачем тогда вообще возвращать «graceful»-ошибку? Ну, это правила хорошего тона. В конце концов, может в клиент понадобится вставить костыль, который может слать несколько разных видом одного и того же запроса, например к разным конфликтующим версиям серверного  приложения – тогда, поймав эту ошибку, клиент сможет переотправить запрос другого вида.

Но вообще говоря, в обычных условиях эти ошибки фатальны, и просто должны писаться в лог для отладки.

Во, хороший ответ: «Если ошибка не фатальная, а является ответом на запрос – то статус всё равно 200, а если ошибка не позволяет запросу корректно отработать – то статус нужно вернуть другой».
Ты путаницу вводишь. Теперь разработчик должен думать когда ему 200 вернуть, а когда нет
источник

PS

Pavel Shakhov (pongo... in Node.js — русскоговорящее сообщество
Да и все равно ты теперь бизнес ошибки объявляешь через ошибки транспортного уровня.

Тогда уж лучше обычный рест
источник

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Алексей Попов
Такое мнение, как мне кажется, следствие привычки возвращать ошибку через эксепшны
Но это не всегда верно. Возможно, надо различать исключение (ошибка в адресной строке) и ошибку данных (пользователя нет). Второе - штатная ситуация, а никак не исключение
> Второе - штатная ситуация, а никак не исключение

Во-от!

Хотя, отсуствие пользователя может и быть нештатной ситуацией в некоторых алгоритмах, например – отсуствие «текущего» пользователя, из-под которого работает фронт. Тогда это скорее всего будет exception, и продолжать всё равно нельзя.

Но с точни зрения логики самого API – это как раз нормальный отрицательный ответ. Как «неверный пароль» – неверный пароль не должен отдавать 403, потому что 403 – это когда вы не имеете права даже пытаться вводить какой-то там пароль!
источник

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
Алексей Клименко
> Второе - штатная ситуация, а никак не исключение

Во-от!

Хотя, отсуствие пользователя может и быть нештатной ситуацией в некоторых алгоритмах, например – отсуствие «текущего» пользователя, из-под которого работает фронт. Тогда это скорее всего будет exception, и продолжать всё равно нельзя.

Но с точни зрения логики самого API – это как раз нормальный отрицательный ответ. Как «неверный пароль» – неверный пароль не должен отдавать 403, потому что 403 – это когда вы не имеете права даже пытаться вводить какой-то там пароль!
Это не так, 403 подходит для неверного пароля
источник

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Pavel Shakhov (pongo)
Ты путаницу вводишь. Теперь разработчик должен думать когда ему 200 вернуть, а когда нет
function remove_file(name){
 if(!name || typeof name !== 'string')
   throw new Error('Wrong call');
 // далее – вернуть true если файл удалён или не существовал, и false если удалить не получилось
}

Здесь я бросаю исключение, которое не должен никто ловить, оно должно стрельнуть в того, кто попытался вызвать мою функцию на undefined переменной.

И это не должно случаться в реальной программе, ни при каких условиях!

Это разные типы ошибок.
источник

АК

Алексей Клименко... in Node.js — русскоговорящее сообщество
Sergey 🛸
Это не так, 403 подходит для неверного пароля
А когда пользователь не имеет прав на вход (забанен) – то что, «403*», четыреста три со звёздочкой?
источник

OM

Oleg Meshaev in Node.js — русскоговорящее сообщество
Sergey 🛸
Это не так, 403 подходит для неверного пароля
источник

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
If authentication credentials were provided in the request, the server considers them insufficient to grant access.

Как я и сказал
источник

PS

Pavel Shakhov (pongo... in Node.js — русскоговорящее сообщество
Алексей Клименко
Код приложения ничего не сможет сделать с этой ошибкой, эта ошибка – для разработчика.

Если какой-то required параметр не передан – всё, клиентская часть (фронт) работать не может, это фатальная ошибка. Назад вызывающему нельзя возвращать ничего кроме ошибки, потому что мы так и не поняли, был там юзер в базе, или нет.

Зачем тогда вообще возвращать «graceful»-ошибку? Ну, это правила хорошего тона. В конце концов, может в клиент понадобится вставить костыль, который может слать несколько разных видом одного и того же запроса, например к разным конфликтующим версиям серверного  приложения – тогда, поймав эту ошибку, клиент сможет переотправить запрос другого вида.

Но вообще говоря, в обычных условиях эти ошибки фатальны, и просто должны писаться в лог для отладки.

Во, хороший ответ: «Если ошибка не фатальная, а является ответом на запрос – то статус всё равно 200, а если ошибка не позволяет запросу корректно отработать – то статус нужно вернуть другой».
Валидация входящих параметров - это бизнес операция, она не может быть фатальна
источник

OM

Oleg Meshaev in Node.js — русскоговорящее сообщество
Подскажите как лучше всего реализовать авторизацию пользователя, чтоб было меньше рисков авторизоваться за счёт краденого куки? Я смотрел jwt, но там передают обычно username и _id, это же тоже не безопасно.
источник

CM

Chingiz Mamiyev in Node.js — русскоговорящее сообщество
Oleg Meshaev
Подскажите как лучше всего реализовать авторизацию пользователя, чтоб было меньше рисков авторизоваться за счёт краденого куки? Я смотрел jwt, но там передают обычно username и _id, это же тоже не безопасно.
Сессия
источник

OM

Oleg Meshaev in Node.js — русскоговорящее сообщество
Chingiz Mamiyev
Сессия
передавать в jwt id сессии?
источник

CM

Chingiz Mamiyev in Node.js — русскоговорящее сообщество
Oleg Meshaev
передавать в jwt id сессии?
Нет, юзать сессию без jwt
источник

S🛸

Sergey 🛸 in Node.js — русскоговорящее сообщество
Алексей Клименко
А когда пользователь не имеет прав на вход (забанен) – то что, «403*», четыреста три со звёздочкой?
Просто 403
источник

OM

Oleg Meshaev in Node.js — русскоговорящее сообщество
Chingiz Mamiyev
Нет, юзать сессию без jwt
Спасибо
источник

PS

Pavel Shakhov (pongo... in Node.js — русскоговорящее сообщество
Oleg Meshaev
Подскажите как лучше всего реализовать авторизацию пользователя, чтоб было меньше рисков авторизоваться за счёт краденого куки? Я смотрел jwt, но там передают обычно username и _id, это же тоже не безопасно.
А как у тебя куку украдут?
источник

OM

Oleg Meshaev in Node.js — русскоговорящее сообщество
через xss
источник

GS

Grigorii K. Shartsev in Node.js — русскоговорящее сообщество
Oleg Meshaev
через xss
Использовать csrf токен
источник

SR

Sergey Ryzhkov in Node.js — русскоговорящее сообщество
Oleg Meshaev
через xss
Или http only на куку
источник