Sergey
jwt или сессии - да)
ты тред выше не читал что-ли?
Dmitry
ты тред выше не читал что-ли?
сорри - сработал как бот - больше так не буду) но многие вещи которые пишешь по jwt несколько не так работают - отзывы обычно решают не хождением по базам - а 2 токенами, refresh токена - который да - заставит слазить в бд при выпуске токена доступа (на то валиден ли пользователь и не удалили ли его) и самого токена доступа Есть еще вариант с проверкой безопасности в БД при выполнении БЛ (грубо говоря добавляем where isBan = false и проверяем количество измененных строк) В архитектуре микросерввисов jwt самый мимими вариант
Anton
я с отзывами пилил такую штуку: в базу писались выданные токены, если например юзера забанили, то в redis писались jti токенов этого юзера с TTL до достижения exp токена
Anton
ну и соответственно при проверке revokнутый токен или нет апп ходит в редис
Anton
при перезапуске сервера апп синхронизирует данные с редисом
Anton
можно в принципе и не редис, а просто где-то в массиве хранить
Anton
но в принципе да, это переизобретение существующего механизма, просто чтобы не лазить в базу лишний раз
Anton
хотя, наверное, в том, чтобы залезть в базу на каждое действие юзера в принципе нет ничего криминального
Sergey
ну вот это и не нужно
Sergey
общение между микросервисами это одно из лучших применений jwt
Anton
но вот например пилишь ты rest api (сейчас же все пилят rest api), ты будешь строить апишку на сессиях?
Sergey
лол)
Vint
Сессии и токены, а не jwt и тем более в куках.
Sergey
вот
Sergey
хотел так ответить
Dmitry
но вот например пилишь ты rest api (сейчас же все пилят rest api), ты будешь строить апишку на сессиях?
ну я сейчас предпочитаю другой подход - сокеты и решаем kick/ban просто - выкидываем в общую шину событие и пользователю рвем сессию - при следующем коннекте - будет проверка из бд
Daniil
Извините за глупый вопрос, но я не очень понимаю, как правильно написать readdir асинхронно, в данном случае, может ли кто - то показать на примере этого куска кода?
Daniil
Dmitry
ну вот мобилку не подключишь к этому))
да много чего не подключишь) я про веб-мордочку
Daniil
с промисами конечно было бы проще)
Ну мне надо еще на async/await попробовать, я просто только сел ноду изучать, вот и глупые вопросы
Sergey
ой
Sergey
не пробуй
Sergey
пока не освоишься с промисами
Sergey
да много чего не подключишь) я про веб-мордочку
сокеты с вебом хорошо прям много фич можно заюзать но файлы не поотправляешь например
Daniil
Спасибо
Sergey
почему?
ну между запросами, на сервере не должно храниться состояния
Anton
это вроде как противоречит самой концепции REST-а, нет?
ну я хз, вроде как да. я вот столкнулся с такой хернёй, когда прикручивал взаимодействие с апишкой amoCRM, у них по апишке ты получаешь куку 😑
Dmitry
ну между запросами, на сервере не должно храниться состояния
нет - в процессе, в приложении может, например в redis
Sergey
опередил=)
но тут тоже проблема если делать полностью stateless, получаем неприятную дырку
Anton
Сессии и токены, а не jwt и тем более в куках.
скиньте что ли какой-нибудь гайд, где про это пишут
Vint
Выше была картинка, сотню раз тут постили уже. Просто не jwt. А дальше вариантов не много.
Anton
эта?
Anton
Vint
Да. Ну и любая ссылка из гугла, типа этой https://scotch.io/bar-talk/why-jwts-suck-as-session-tokens Там и про микросервисы есть упоминание, мол годно для них.
Daniil
А почему он в данном случае неопределнно выводит?
сomorsiс
потому что асихронность
Daniil
то есть это нормально?
Sergey
да
Sergey
но ты пишешь неправильно)
Vint
эта?
Ну а оригиналы с картинкой вот http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/ http://cryto.net/~joepie91/blog/2016/06/19/stop-using-jwt-for-sessions-part-2-why-your-solution-doesnt-work/
Daniil
а как надо тогда?
Eldar
функция fs.readdir возвращает тебе не массив, а НИЧЕГО
Anton
потому что ты передаёшь в функцию fs.readdir в данном случае два аргумента (смотри документацию), первый — директория, которую нужно прочитать, второй — callback, функция, которая выполнится, когда эта асинхронная операция свершится
Daniil
понял примерно
Anton
в callback ты передаёшь тоже два аргумента — err, ошибка, которая будет не null, если есть ошибка io операции, и files, массив, который будет содержать список файлов, если !err
Eldar
Варианта два, либо используй синхронные функции, либо асинхронные
Anton
files у тебя будет жить только в рамках этой функции callback
Eldar
Да просто скажите что JS гавно
Eldar
И что из Promise/Callback нельзя сделать return
Dmitry
может будет понятней если не идти по всему стеку: callback, promise, async а сразу к async/await?
Eldar
Ну async/await же просто сахар по сути =(
Eldar
Внутри стандартные промисы
Тимофей 🛴
Ну async/await же просто сахар по сути =(
Сахар, ты хотел сказать
Eldar
Да
Eldar
Сахар
Sergey
но сахар клевый
Eldar
Имхо нужно понимать как это работает на самом деле =/
Dmitry
я бы сказал героин - привыкание 100%
Eldar
Он убивает
Nikita
Ну async/await же просто сахар по сути =(
уже было несколько статей, которые показали, что async/await работают лучше промиссов.
Dmitrii
надо сразу просто разобраться как эвент луп работает и что такое не блокирующий поток, сразу все вопросы по callback/eventemitter/stream/promise/await станут понятны
Anton
Ну async/await же просто сахар по сути =(
всё, что не машинный код — синтаксический сахар