我可以在密码哈希函数中创建用户对象吗?

Posted

技术标签:

【中文标题】我可以在密码哈希函数中创建用户对象吗?【英文标题】:Can I create a user object inside password hash function? 【发布时间】:2021-12-12 05:00:40 【问题描述】:

我正在关注后端 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 在更大范围内不可用

【讨论】:

以上是关于我可以在密码哈希函数中创建用户对象吗?的主要内容,如果未能解决你的问题,请参考以下文章

你能计算出 Active Directory 使用的密码哈希吗?

在 PHP 中创建安全密码哈希但检查 Access VBA

在 PHP 中匹配 128 个字符的密码哈希 - 使用 Ruby on Rails 加密

Django:set_password不是哈希密码?

如何迁移密码哈希?

对 C++ 哈希表有一个好的哈希函数吗?