Kanat
cloudedbe
какой же ебучий это passport
Dmitry
что в нем конкретно не нравится??
cloudedbe
Ух. Начнем с того, что я на самом деле отчасти сам виноват. Когда добавил в статик метод для модели mongoose, который вместо _id искал по id и ничего не находил. Потом оказывается у меня chai-http не отправлял username и password поля.. При этом паспорт никак мне не сигнализировал об этих ошибках. Вот и всио :с Я просто не знал где их искать(ошибки)
Dmitry
вроде у методов passport.authenticate и passport.authorize есть коллбэки на ошибки. Я давно его использовал, тем не менее запомнил что почти всё пришлось заворачивать в try/catch и пробрасывать ошибки наверх. Но это общая проблема кода на коллбэках
cloudedbe
где в доке https://github.com/jaredhanson/passport сказано, что passport.authenticate принимает вторым аргументов в том числе обьект с ключем successReturnToOrRedirect: '/profile'? :с
cloudedbe
Почему для того, чтобы проверить залогинен ли пользователь надо ставить отдельный пакет connect-ensure-login и об этом так же нет в доке
cloudedbe
Я честно говоря даже понять не могу, работает ли у меня сейчас обработчики для роутов от паспорта или нет. Пока буду разбираться почему chai-http не шлет пост дату
Dmitry
дока ужасная, согласен
cloudedbe
Почему не было сказано сразу, что к монгусу есть еще один пакет? :с Дефолтный пример с доки ведет лишь на просто пример к експрессу
cloudedbe
Вобщем хз. Мне надо было быстро накидать авторизацию и регистрацию для тестового, а я промучался с этим больше, чем закладывал
cloudedbe
Я понимаю, что необходимо будет сделать соль и хеш для паролей, если это не тестовая, но не вижу об этом упоминания в доке :с
cloudedbe
Вобщем может вся проблема только в доке..
Dmitry
не знаю как щас, но полгода назад какой-либо альтернативы пасспорту для ноды не было вообще :(
Dmitry
чтобы поддерживал (пусть модулями) столько провайдеров авторизации
Alexander
а какие альтернативы пасспорту для ноды есть сейчас?
AlexMist
Это вообще нормально ? В sequelize js модель со связями в JSON перегонять вручную нужно ?
AlexMist
😝
Denis
А кто что для валидации использует? Например, пришёл POST или GET запрос, который надо обработать прежде, чем спроксировать во внутренний сервис.
Denis
Django Forms :D
Denis
Оу
Denis
Есть ссылка на API под рукой?)
Denis
API чего?
Denis
Если что - можно конечно повесить django rest framework вроде API и валидировать через него но это херня)
Denis
(оффтоп про питон)
Denis
Да не обязательн овешать
Denis
Python это тот же JS
Denis
Просто взять идею можн)
Anonymous
Denis
joi
Норм) Мы тут внезапно очень похожий запилили
Artem
ajv норм
Artem
https://github.com/epoberezkin/ajv
Anonymous
joi не нравится своим императивным подходом, всё на функциях, не получится просто так вынести валидацию например в json
Anonymous
Поэтому ajv)
Denis
В каких кейсах может потребоваться валидация по JSON? :)
Denis
JSON Schema вроде не оч подходит для валидации в реальной жизни
A
Для валидации контента (ну, там, длина пароля, например), нужно что-то еще использовать. Ну или использовать formats из JSON Schema (хотя, это и не все позволяет проверить)
Sergey
Anonymous
++
Dreamerinnoise
Sergey
у меня есть знакомые чуваки, которые валидируют входящие данные REST API на сервере
Pavel
юзаем swagger (openAPI теперь) это по сути RESTful платформа на основе JSON Schema
Denis
Denis
Mikhail
Юзаем самопис поверх raml схемы
Alexander
Ajv оч ок либа
Alexander
Контент тоже валидирует - и длина и enum'ы ну и формат конечно же есть
Alexander
Пытаюсь подключиться к mssql server через tedious, но ничего не выходит. Просто зависает запрос http://pastebin.com/9yV0NDUX
cloudedbe
Сап. Допустим у нас есть древовидная структура в монго. При вставке нового потомка у нас две операции: Сама вставка нового узла, добавление в childs парента нового узла. Как их сделать атомарной или одной транзакцией в монго? :с //я знаю, что транзакций вроде как в монго нет, но все же должно быть какое-то решение
Vladimir
Никак
cloudedbe
Другими словами мы не можем гарантировать, что операция всегда выполнится верно?
Vladimir
Используй только один указатель
Vladimir
Именно
Anton
Ага, в монге на любом уровне вобще отсутсвует гарантия, что выполнилось хоть что-то
Anton
Так что тут только руками писать костыли
Anatoliy Skuratov
Можно использовать https://docs.mongodb.com/manual/tutorial/perform-two-phase-commits/
Vladimir
Anonymous
в полиморфность несколько месяцев назад не мог по крайней мере
Anonymous
в итоге у меня поверх сваггера был еще и joi
Pavel
Всё от задачи зависит. И от того что за либа используется. Я юзал swagger-express-middleware. В моем случае я большую часть валидации сделал. Хотя конечно было бы круто если бы можно было вместо tv4 заюзать ajv
Anonymous
ну вот я ее и юзал, ну для простейшей валидации пойдет конечно, но обычно нужна не настолько простая
Pavel
Я больше разочаровался в REST подходе чем в самих либах. Думаю в следующий раз буду смотреть в сторону graphQL
Roman
A
Ajv оч ок либа
у нас на AJV вся валидация входных данных построена. Чертовски удобно.
S 🇺🇦
vitshev
A
Как валидацию делаете, в каждом контроллере?
смотря о какой мы валидации говорим.
Для всяких распространенных штук, типа email, password, id, еще что-то там, есть форматтеры. Они проверяют формат прям в схеме. Часть из них написана нами, часть из коробки была, email например
Там же enum-ы.
Если вопрос о том, где это вообще проверять, то хм.. в отдельной мидлваре.
Если вопрос о том, как делать кросс-валидацию, когда есть несколько полей, которые должны появляться только в определенных комбинациях, то у нас таких случаев мало, но они через вложенные схемы (но тут хитро и не всегда прямо ). Но для нас последний кейс очень не основной, так что всё ок
vitshev
Про валидацию входных данных. Если есть контроллер который обрабатывает post запрос например, то в нем и надо валидировать, странно это делать в мидлваре. По поводу текста ошибок, локализуете, насколько можно кастомные вставлять в ajv?
A
Примерно так
A
A
Это я на коленке собрал пример, так что если где-то ошибка синтаксическая, то не обзывайтесь))
A
Для двух-трёх методов это явно оверкил. Но у нас очень-очень-очень развесистое API
Alexander
ага
Alexander
еще там можно нормальных методов оберточных написать пару хелперных функций (toAjvObject и toAjvArray) и вынести все эти {type: 'string'} в отдельный нормальный объект
Alexander
блин, да тут даже мини доклад можно сделать