В настоящее время у меня возникла проблема с моим кодом входа в систему, где предполагается взять имя пользователя и пароль, найти соответствующий хэш в базе данных, сравнить их, подписать JWT и вернуть его, чтобы его можно было отправить обратнопользователь:
async login(username, password): Promise<boolean | void> {
// TODO: Fix typing.
// Types the return as void currently - should return object.
// No return at all either, however console.log prints result - check SO when you have time
const dbPwdHash = await this.userRepository.createQueryBuilder('user')
.select(['user.password', 'user.id'])
.where('user.username = :username', {username})
.getOne();
return compare(password, dbPwdHash.password)
.then(
(res) => {
if (res) {
return sign({ id: dbPwdHash.id }, this.privateKey, { algorithm: 'ES512' }, (err, token) => {
if (err) {
return {err};
} else {
console.log(token);
return {data: token};
}
});
}
},
)
.catch(
(err) => {
console.log(err);
},
);
}
Определения типа возвращаемые значения для сравнения и знака (от bcrypt
и jsonwebtoken
соответственно) по умолчанию аннулируются при использовании асинхронных функций с обещанием сравнения и сравнения.обратный вызов на знак.
Самая большая проблема, с которой я сталкиваюсь, это то, что в итоге ничего не возвращается, даже если console.log
показывает, что пароль успешно сравнивается и JWT успешно подписывается.Я уверен, что это проблема с функцией знака, так как возврат результата из .then()
в сравнении работает нормально, однако, как только я добавляю кодовый блок знака, ничего не возвращается.Однако я не уверен, что именно является причиной этого, а также как я должен соблюдать правила набора текста, когда сравнение возвращает <boolean | void>
, а знак возвращает <string | void>
afaik.