A
Этот-этот
A
UserSchema.methods.comparePasswords = function comparePasswords(password) {
return bcrypt.compare(password, this.password);
};
всегда возвращает undefined
A
что делает невозможным использование try/catch
A
выше написал
Sergey
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
😬
ixplo
"110010"
A
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
Таймураз
Дима
Sergey
Bogdan
что за деградация к коллбэкам)))
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
благодарю, очень помогли. уже не первый раз
Таймураз
Мб и не подвиснет, я не тестил скорость работы синхронной функции хеша
Таймураз
Без проблем)
Sergey
A
Таймураз
A
вот где crypto используете
Таймураз
7.9.0, если не ошибаюсь
Таймураз
A
думал, что в 7.6.0 нету. всё есть. настраиваю)
Таймураз
Используй последнюю семерку
ixplo
ixplo
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.