#javascript #hash #passwords #bcrypt #user-object
Вопрос:
Я следовал учебнику по интерфейсу REST Api, и в видео он сделал вот что: создал объект пользователя, а затем изменил newUser.password на сгенерированный хэш.
// Data is valid, register user
let newUser = new User({
name,
username,
password,
email,
});
// Hash password
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(newUser.password, salt, (err, hash) => {
if (err) throw err;
newUser.password = hash;
newUser.save().then(user => {
return res.status(201).json({
success: true,
msg: "User is now registered"
})
})
})
})
Почему бы просто не сделать все это сразу?
// Why not do it in one go instaed of creating and then changing User?
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(password, salt, (err, hash) => {
if (err) throw err;
let newUser = new User({
name,
username,
hash,
email,
});
newUser.save().then(user => {
return res.status(201).json({
success: true,
msg: "User is now registered"
})
})
})
})
Есть ли что-то неправильное в том, чтобы делать это вместе?
Ответ №1:
поскольку bcrypt использует функцию обратного вызова, ваш хэш будет доступен только между скобками для функции обратного вызова, поэтому вы выполняете назначение между этими скобками. поскольку вы объявляете newuser между этими скобками, то newuser недоступен в большей области