0

我正在关注后端 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"
            })
        })
    })
})

一起做有什么问题吗?

4

1 回答 1

0

由于 bcrypt 采用回调函数,因此您的哈希仅在回调函数的括号之间可用,这就是您在这些括号之间进行分配的原因。因为您在这些括号之间声明了 newuser,所以 newuser 在更大的范围内不可用

于 2021-10-27T13:15:42.913 回答