在使用mongoose插入哈希密码(Bcrypt)到MongoDB时遇到问题的可能原因是没有正确配置密码字段的哈希选项。下面是一个完善且全面的答案:
问题描述: 无法使用mongoose在mongodb中插入哈希(Bcrypt)密码。
解决方案:
select: false
选项隐藏密码字段的默认显示。示例代码:
const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const userSchema = new mongoose.Schema({
username: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true,
select: false // 隐藏密码字段的默认显示
}
});
// 在保存用户之前,对密码进行哈希处理
userSchema.pre('save', async function(next) {
const user = this;
if (!user.isModified('password')) return next();
try {
const salt = await bcrypt.genSalt(10);
const hash = await bcrypt.hash(user.password, salt);
user.password = hash;
next();
} catch (error) {
return next(error);
}
});
const User = mongoose.model('User', userSchema);
module.exports = User;
示例代码:
const User = require('./models/user');
// 创建新用户
const createUser = async (username, password) => {
try {
const user = new User({
username,
password
});
await user.save();
console.log('用户创建成功');
} catch (error) {
console.error('用户创建失败', error);
}
};
// 调用创建用户函数
createUser('john', 'password123');
这样,使用mongoose插入哈希密码(Bcrypt)到MongoDB的问题应该得到解决。
推荐的腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云