A
Этот-этот
A
UserSchema.methods.comparePasswords = function comparePasswords(password) { return bcrypt.compare(password, this.password); }; всегда возвращает undefined
A
что делает невозможным использование try/catch
Sergey
Этот-этот
В чем сложность
A
выше написал
Sergey
что делает невозможным использование try/catch
Обёртку написать в чем проблема
A
например?
A
я в контроллере переписал вот так: (без try/catch) const matches = await user.comparePasswords(password); if (matches) { ctx.body = user; } else { ctx.throw(400, 'Bad credentials') }
A
Обёртку написать в чем проблема
возможно не хватает опыта)
A
и должна ли вообще в теории вот эта запись возвращать undefined: return bcrypt.compare(password, this.password);
V
ты неправильно используешь метод
V
скорее всего
V
там промис?
V
или что он возвращает
Sergey
Мб на колбэках
Sergey
Бля
Sergey
Так там колбэки
A
или что он возвращает
буквально, console.log(bcrypt.compare(password, this.password)); в консоли возвращает Promise { <pending> }
Sergey
Так промис
Kons
Там промис, но он не throw-ится при несопадении, а резовлится в false
Kons
https://github.com/kelektiv/node.bcrypt.js#with-promises
A
у меня ещё подключен bluebird : mongoose.Promise = bluebird;
A
короче, каюсь, но мне бы более простым языком )
A
а то "так там колбэк", "так там промис"
ixplo
😬
ixplo
"110010"
Kons
const bcrypt = require('bcrypt'); class UserSchema { constructor(hash) { this.hash = hash; } comparePasswords(password) { return bcrypt.compare(password, this.hash); } } async function start() { const hash = await bcrypt.hash('secret', 10); const user = new UserSchema(hash); const passwordsMatch = await user.comparePasswords('secret'); if (passwordsMatch) { console.log('passwords match'); } else { console.warn('passwords do not match'); } } start();
A
благодарю. к такому решению и я пришёл
Алексей
что-то не догоняю callback function findIssue (issueKey) { jira.issue.getIssue({ issueKey: issueKey }, function (error, issue) { if (error) { return 0; } return 1; } ) } console.log(findIssue (issueKey)) // undefined Читаю и начитаться не могу, в общем помогите вернуть 0 || 1 Извиняюсь за нубский вопрос...
Bogdan
Ты возвращаешь результат в функцию, которая вызывает коллбэк
Bogdan
Нужно в функцию findIssue передать функцию коллбэк, и в коллбэке к методу jira.issue.getIssue вызывать этот коллбэк
Kons
function findIssue(issueKey) { return new Promise((resolve, reject) => { jira.issue.getIssue({ issueKey }, (error, issue) => error ? reject(error) : resolve(issue)); }); } и вызов где-нибудь внутри async-функции: const result = await findIssue(...); console.log(result); // 0 или 1
Bogdan
function findIssue (issueKey, callback) { jira.issue.getIssue({issueKey: issueKey}, function (error, issue) { if (error) { return callback(0); } callback(1); } ) } findIssue (issueKey, function(result) { console.log(result) })
Bogdan
та куда же ему промисы, если он с коллбэками не разобрался)
Дима
callback -> promise -> async/await -> stream -> future -> callback
Дима
Bogdan
что за деградация к коллбэкам)))
CherryTea
что за деградация к коллбэкам)))
тут не деградация и круговорт какой-то
Таймураз
-> haskell -> death |
Тогда уж -> delphi -> death by accident
Sergey
Not accidental death by a delphi
Алексей
A
ну как.. если вот это можно считать решением, а не костылём.. то решил: const matches = await user.comparePasswords(password); if (matches) { ctx.body = user; } else { ctx.throw(400, 'Bad credentials') }
Таймураз
И почему вы не используете встроенные методы ноды?
A
я больше фронт, вот только-только чота начинаю писать на ноде, поэтому многого не знаю
Таймураз
import { createHmac, randomBytes } from 'crypto'; function encryptPassword(password, salt) { if (!password) return false; return createHmac('sha256', salt).update(password).digest('hex'); } function setPassword(password) { const generatedSalt = randomBytes(128).toString('hex'); this.salt = generatedSalt; this.hashedPassword = encryptPassword(password, generatedSalt); }
Таймураз
UserSchema.methods = { checkPassword(password) { const { salt, hashedPassword } = this; return encryptPassword(password, salt) === hashedPassword; } };
A
а, я понял. действительно посмотрю в эту сторону. а то эти старые либы порой доставляют
A
а async/await в вашей схеме не нужен?
Таймураз
А смысл?
Таймураз
Ну, вообще можно, потому что при авторизации сервер подвиснет на полсекунды
A
благодарю, очень помогли. уже не первый раз
Таймураз
Мб и не подвиснет, я не тестил скорость работы синхронной функции хеша
Таймураз
Без проблем)
Дима
-> haskell -> death |
-> death -> Haskell -> Agda ~> Idris
Sergey
-> death -> Haskell -> Agda ~> Idris
Хаскель только после смерти?))))
Таймураз
а какая у вас версия ноды?
Смотря какой проект
A
вот где crypto используете
Таймураз
7.9.0, если не ошибаюсь
Таймураз
вот где crypto используете
А почему ви спrашиваете?
A
думал, что в 7.6.0 нету. всё есть. настраиваю)
Таймураз
Используй последнюю семерку
Ivan
По каким причинам может не удаляться npm пакет? > npm unpublish --force
Ivan
А в консоли всё ок, говорит что убрал.
Таймураз
http://blog.npmjs.org/post/141905368000/changes-to-npms-unpublish-policy
Ivan
Спасибо.
Таймураз
Пожалуйста
Oleg 🍺
Ребят, а что вы используете для работы с PG?
V
knex
Oleg 🍺
Это ORM?
Oleg 🍺
Билдер
Oleg 🍺
Окей
arts
psql, иногда pgadmin3.