
Michael
16.08.2018
20:00:16

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

Alexander
16.08.2018
20:03:52

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

Google

Michael
16.08.2018
20:05:50

Dames
16.08.2018
20:08:36

Michael
16.08.2018
20:10:42

Yura
16.08.2018
20:10:55

Michael
16.08.2018
20:11:20

K
16.08.2018
20:12:07

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 и сообщение что не удалось авторизовать... но не ошибку.
Так вообще делают? я видел похожие примеры, но до конца что то их не догоняю... ну и не будет ли такой алгоритм проблемой с безопасностью?

Michael
16.08.2018
20:15:40


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

Google

Andrei
16.08.2018
20:24:23
как-то так
(писал на коленке могут быть тупые ошибки типа пропущенной скобки)
а тут получается, кто угодно, пришел, сунул заэкспайренный токен (даже заэкспайренный 2 года назад), и о чудо, он сам обновился. класс вообще
если уж добавлять автоматическое обновление токена, нужно, прежде всего, обеспечить чтобы один токен можно было обновить только один раз.
кроме того, привязать обновление токена к IP и UserAgent. и лучше всего сам токен тоже, чтобы с других IP не работал.


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

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

Богдан
16.08.2018
21:11:13

Andrei
16.08.2018
21:11:17

Alexey
16.08.2018
21:11:50

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

Google

Alexey
16.08.2018
21:12:12
А как такая штука 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

Alexey
16.08.2018
21:13:23

Дмитрий
16.08.2018
22:39:44
привет
кто то ещё не спит?
есть не большой вопрос
кто может помочь
?
Мне тут нужно не большую функцию сделать Класс с функцией, которая с интернета по ссылке может скачать файл и сохранить на компе но она должна быть асинхронна с использованием async и await

John
16.08.2018
22:51:21
?

K
16.08.2018
23:06:22

Nell
17.08.2018
05:19:33

Alexander
17.08.2018
05:23:46

Георгий
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
какой флаг поставить нужно

arts
17.08.2018
07:25:44

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