@nodejs_ru

Страница 2423 из 2748
Michael
16.08.2018
20:00:16


Dames
16.08.2018
20:03:43
не проще ли какой-нибудь ORM подтянуть и не писать руками запросы, тем более такие простые

K
16.08.2018
20:04:37
Тебе придётся или чейнить запросы и поменять forEach на for of который поддерживает async/await

Google
Michael
16.08.2018
20:05:50
не проще ли какой-нибудь ORM подтянуть и не писать руками запросы, тем более такие простые
может и проще. Дайте ссылку куда копать хоть? Я просто с нодой только столкнулся. Жизнь заставила)

Dames
16.08.2018
20:08:36
Michael
16.08.2018
20:10:42
Тебе придётся или чейнить запросы и поменять forEach на for of который поддерживает async/await
цикл for in нужно оборачивать еще в одну функцию получается? или куда async / await дописывать в данном случае?

Andrei
16.08.2018
20:13:34
Michael
16.08.2018
20:13:56
о. спасибо. буду пробовать

Andrei
16.08.2018
20:14:39
есть правда отличие с таким вариантом, важное, в том что запросы будут выполняться последовательно а не параллельно

Alexey
16.08.2018
20:15:31
А посоветуйте как с в express и jsonwebtoken легко и правильно рефрешить токен? лучше не с отдельным роутом который по старому токену отдает новый. А с одной универсальной миддварей авторизации. Думаю нужна такая логика: - Если токен не устарел вернуть юзера - Если токен устарел, но пригоден для рефреша, то рефрешить вернуть юзера и новый токен - Если токен устарел полностью включая REFRESH_LIFE_TIME или не валиден, не существует.. и далее передать просто user равный null и сообщение что не удалось авторизовать... но не ошибку. Так вообще делают? я видел похожие примеры, но до конца что то их не догоняю... ну и не будет ли такой алгоритм проблемой с безопасностью?

Alexey
16.08.2018
20:17:43
Вот один из примеров jwt.verify(token, 'secret', function(err, decoded) { if (err) { // it should if (err.name == 'Error' && err.message == 'jwt expired') { // paranoid mode // if decoded payloads needed : old_payloads = jwt.decode(token); // now you can check user, permissions, .... and serve a new token new_token = jwt.sign({ iss: old_payloads.iss}, 'secret', {expiresInMinutes: 60}); res.json({token:new_token}); } } { iss: old_payloads.iss} вот это я не очень понимаю.. почему только это.. а где остальной payload... и еще достаточно ли этого? просто расшифровываем просроченный токен и складываем его payload в новый токен и все? видел другие примеры когда рефреш токен и access token генеряться сразу в момент логина оба. Отдаються клиенту.. еще refresh token записывается в redis Но возможно это уже овер... Как Вы делаете в своих приложениях? Мне еще не хочеться фронтэнд усложнять для хранения двух токенов.. ну или что бы фронтенду приходилось в отдельный роут стучать для рефреша токена, а затем повторять исходный запрос..

Andrei
16.08.2018
20:24:05
я вот думаю, может промисами как-то можно. Типа с помощью Promise.all
можно конечно const query = util.promisify(connection.query); query('SELECT 1').then(results => { const promises = results.map(el => query("SELECT 2").then(r => el.price = r)); Promise.all(promises).then(()=>res.send(results)); })

Google
Andrei
16.08.2018
20:24:23
как-то так

(писал на коленке могут быть тупые ошибки типа пропущенной скобки)

а тут получается, кто угодно, пришел, сунул заэкспайренный токен (даже заэкспайренный 2 года назад), и о чудо, он сам обновился. класс вообще

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

кроме того, привязать обновление токена к IP и UserAgent. и лучше всего сам токен тоже, чтобы с других IP не работал.

Alexey
16.08.2018
20:42:31
кроме того, привязать обновление токена к IP и UserAgent. и лучше всего сам токен тоже, чтобы с других IP не работал.
это пока все же лишнее.. тем более приложение совсем не критичное в плане авторизации..

не оплата итп...

лишь возможность сделать заказ не подставляя заново данные.. а заказ будет проверяться вообще отдельно..

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

Andrei
16.08.2018
20:45:41
обычно хранят все валидные токены в БД вместе с профилем пользователя, и проверяют их. для этого кстати jwt не нужен

Alexey
16.08.2018
20:46:16


Michael
16.08.2018
20:46:24


Andrei
16.08.2018
20:46:25
если токен заэкспайрился, рефрешишь, старый удаляешь из профиля, новый закидываешь туда и отдаешь юзеру

Alexey
16.08.2018
20:46:32
ну вот тут я вижу что все валидные рефреш токены кладут в массив... его рекомендуют хранит в redis или типа того.. удалять оттуда.. это типа стандартного решения?

Web
16.08.2018
20:48:31
Есть ли логи у ноды ? Как можно узнать почему крашит сервер?

Andrei
16.08.2018
20:48:52
во-первых, лучше добавить async к функции обработчику route, вместо того чтобы дополнительную async функцию делать во-вторых, очевидно же, не ждешь пока async функция завершится))

(если сделать "во-первых", то "во-вторых" произойдет автоматически)

Google
Andrei
16.08.2018
20:49:24
а чем вариант с Promise all не понравился?

Michael
16.08.2018
20:50:10
с промисами еще не пробовал

Andrei
16.08.2018
20:55:20
а как у тебя там вообще await работает интересно? await должен промис ждать оно заменяет callback, т.е. callback больше не нужен

т.е. вместо connection.query('SELECT', function(err, results) { ... })будет const results = await query('SELECT');

только query != connection.query сделай const util = require('util');наверху где все require и потом const query = util.promisify(connection.query)

и почитай плз что-нибудь про async-await и про промисы тоже. это basics, такими вещами стыдно должно быть людей напрягать. всё уже написано подробно, куча статей, видео, на любом языке - гугл в помощь

но слышал что люди рекомендуют не делать jwt если плохо в них шаришь. потому как легко накосячить ?

думаю можно и в редис хранить, какая разница

только не блэклист, а список валидных токенов естественно

Alexey
16.08.2018
21:02:55
только не блэклист, а список валидных токенов естественно
да это понятно. Главная проблема. Я не хочу фронтенд усложнять надобность стучать в отдельный роут для рефреш токена..

По логике фронтенда хочу так: Делаем запрос к бекенду с токеном, бекенд отдал или - юзера - юзера и новый токен - сообщение что не авторизован и все... это нужно и тк у меня не два вида страниц открытие и закрытые.. скорее такие типы страниц (на фронтенде): -закрытые не авторизованный вышвыривается - открытые не авторизованный остаеться. но важно знать авторизован или нет. - гостевые типа логина/регистрации. авторизованный вышвыривается Если на каждую ошибку авторизации я буду на фронте вызывать рефреш токен в axios interceptor и повтор запроса... то зачем мне это к примеру на открытых страницах... где авторизация не обязательна, но нужна знать есть ли все таки она.. все конечно можно сделать и увязать.. но писать какую то сложнотень нет совершенно времени.. и будут трудности в отладке..

Может что готовое есть?

В тоже время безопасность прямо уровня биллинга не нужна..

Богдан
16.08.2018
21:08:37
только не блэклист, а список валидных токенов естественно
В редисе как раз хранят блеклист непротухших рефрешей

Alexey
16.08.2018
21:09:41
В редисе как раз хранят блеклист непротухших рефрешей
Это все ясно. Вопрос в том как обойтись без отдельного роута для рефреш токен. И повторных запросов на фронтенде. Или убедите что это не возможно тогда буду делать по сложной схеме..

Andrei
16.08.2018
21:11:17
В редисе как раз хранят блеклист непротухших рефрешей
блеклист это если бы ты там хранил протухшие а если непротухшие то по всем законам жанра это называется whitelist

Alexey
16.08.2018
21:11:50
Purple
16.08.2018
21:12:07
Что такое paranoid: true?

Google
Alexey
16.08.2018
21:12:12
Что такое paranoid: true?
по мойму прикол автора..

А как такая штука https://github.com/meanie/passport-refresh-strategy ?

Purple
16.08.2018
21:12:33
Yashko?
16.08.2018
21:13:01
Кому-то известны альтернативы QuokkaJs?

Богдан
16.08.2018
21:13:14
Напишу... есть какие то свои наработки?
Да, мы с товарищем всю схему наваяли

Дмитрий
16.08.2018
22:39:44
привет

кто то ещё не спит?

есть не большой вопрос

кто может помочь

?

Мне тут нужно не большую функцию сделать Класс с функцией, которая с интернета по ссылке может скачать файл и сохранить на компе но она должна быть асинхронна с использованием async и await

Nell
17.08.2018
05:19:33
Что такое paranoid: true?
Не удалять строки из БД, а устанавливать deletedAt

Георгий
17.08.2018
07:20:36
Привет ребят

Подскажите, есть такая ситуация. нужно один скрипт запустить на Node 0.14, а другой на той же машине запустить под node 8. Как лучше это реализовать?

Google
Георгий
17.08.2018
07:21:51
нужно чтобы прям паралельно могли запуститься

nvm вроде только переключает версии

arts
17.08.2018
07:24:10
В одном терминале запускаешь 0.14, в другом 8

Sheldhur
17.08.2018
07:24:30
он любую выкачивает

Георгий
17.08.2018
07:25:21
В одном терминале запускаешь 0.14, в другом 8
а как запустить под другой версией?

какой флаг поставить нужно

arts
17.08.2018
07:25:44
Георгий
17.08.2018
07:25:56
ладно, еслит сложно, ща поищу

Страница 2423 из 2748