Я пытался внедрить bcrypt в своего пользователя, чтобы использовать JWT для аутентификации; однако всякий раз, когда я пытаюсь хешировать свой пароль с помощью bcrypt, он выдает ошибку в первом выражении if. Я использую express.js в качестве своей основы. Я также должен упомянуть, что я не использую базу данных, а пользователь хранится в массиве в другом файле. Я новичок в узле, и я все еще пытаюсь понять это.
Мои пользовательские маршруты
const express = require('express');
const router = express.Router();
const users = require('../../Users');
const bcrypt = require('bcrypt');
router.post('/signup', (req, res, next) => {
bcrypt.hash(req.body.password, 10, (err, hash) => {
if (err) {
return res.status(500).json({
error: err
});
} else {
const user = {
id: users.length + 1,
userName: req.body.userName,
email: req.body.email,
password: hash,
firstName: req.body.firstName,
lastName: req.body.lastName,
}
user
.then(result => {
console.info(result)
res.status(201).json({
message: 'User created'
})
})
.catch(err => {
console.info(err);
res.status(500).json({
error: err
});
})
}
})
})
Запрос клиента
{
"email": "[email protected]",
"password": "testerpassword",
"userName": "test",
"firstName": "teste",
"lastName": "tester"
}
В паспорт не заглядывал, попробую.
Решением будет использование проверенного и проверенного фреймворка вместо создания собственного. примеры есть на сайте.
@jcuypers Я не думаю, что смогу использовать паспорт, так как не использую базу данных.
@razvanusc хорошо, вы не вводите данные для проверки ошибок или ничего. попробуйте заменить req.body.password фиксированным строковым значением и посмотрите, исчезнет ли ошибка или изменится. или просто попробуйте записать значение в консоль, прежде чем пытаться. нам нужно убедиться, что значение определено.
Когда я устанавливаю фиксированное значение, это дает мне следующую ошибку: /Users/razvanusc/code/razvanusc/project-tool/routes/api/users.js:22 .then()
Давайте продолжить обсуждение в чате.





Создайте вспомогательный метод, который берет пароль, возвращает и зашифровывает его:
const crypto = require("crypto");
const hashThePassword = (str) => {
if (typeof str == "string" && str.length > 0) {
const hash = crypto
.createHmac("sha256", config.hashingSecret)
.update(str)
.digest("hex");
return hash;
} else {
return false;
}
};
Объект конфигурации содержит произвольную секретную строку.
Любая причина, по которой вы не используете паспорт. было бы лучше/проще использовать паспорт и стратегию, которая все делает за вас.