node.bcrypt.js 没有更新对象中的密码
node.bcrypt.js not updating the password in object
我正在使用 Node.js 的 bcrypt 来加密密码。我还使用 Mongoose 创建 MongoDB 数据库和用户模型。
但是,当我 GET
数据(使用 Postman)时,明文密码没有更新为密码哈希。这是我的代码:
User.js:
const userSchema = new mongoose.Schema({
"email": { type: String, required: true, unique: true, trim: true },
"username": { type: String, required: true, unique: true },
"name": {
"first": String,
"last": String
},
"password": { type: String, required: true },
"created_at": { type: Date, default: Date.now },
"updated_at": { type: String }
})
userSchema.pre("save", function(next) {
var user = this
if (!user.isModified('password')) return callback()
bcrypt.genSalt(10, function(err, salt) {
if (err) return next(err)
bcrypt.hash(user.password, salt, function(err, hash) {
if (err) return next(err)
user.password = hash
console.log(user.password)
})
})
const currentDate = new Date
user.updated_at = currentDate
next()
})
const User = mongoose.model("users", userSchema)
export default User
发布用户数据:
router.route("/users").post((req, res) => {
let json = {}
const newUser = new User({
username: req.body.username,
email: req.body.email,
name: {
first: req.body.firstName,
last: req.body.lastName
},
password: req.body.password
})
newUser.save((err) => {
if (err) {
json.error = err.message
} else {
json.id = newUser._id
}
res.json(json)
})
})
正如我上面所说,当我获取数据时没有错误密码仍然只是简单的明文,而不是哈希。当我在函数内部使用 console.log(user.password)
时,它会返回哈希值。
我刚刚开始学习后端知识(我是一名前端开发人员)所以也非常感谢您的任何建议 - 谢谢!
经典节点回调搞砸了。在生成哈希之前调用 next() 回调!
presave 函数需要像这样:
userSchema.pre("save", function(next) {
var user = this
if (!user.isModified('password')) return callback()
bcrypt.genSalt(10, function(err, salt) {
if (err) return next(err)
bcrypt.hash(user.password, salt, function(err, hash) {
if (err) return next(err)
user.password = hash
const currentDate = new Date
user.updated_at = currentDate
next()
})
})
})
我正在使用 Node.js 的 bcrypt 来加密密码。我还使用 Mongoose 创建 MongoDB 数据库和用户模型。
但是,当我 GET
数据(使用 Postman)时,明文密码没有更新为密码哈希。这是我的代码:
User.js:
const userSchema = new mongoose.Schema({
"email": { type: String, required: true, unique: true, trim: true },
"username": { type: String, required: true, unique: true },
"name": {
"first": String,
"last": String
},
"password": { type: String, required: true },
"created_at": { type: Date, default: Date.now },
"updated_at": { type: String }
})
userSchema.pre("save", function(next) {
var user = this
if (!user.isModified('password')) return callback()
bcrypt.genSalt(10, function(err, salt) {
if (err) return next(err)
bcrypt.hash(user.password, salt, function(err, hash) {
if (err) return next(err)
user.password = hash
console.log(user.password)
})
})
const currentDate = new Date
user.updated_at = currentDate
next()
})
const User = mongoose.model("users", userSchema)
export default User
发布用户数据:
router.route("/users").post((req, res) => {
let json = {}
const newUser = new User({
username: req.body.username,
email: req.body.email,
name: {
first: req.body.firstName,
last: req.body.lastName
},
password: req.body.password
})
newUser.save((err) => {
if (err) {
json.error = err.message
} else {
json.id = newUser._id
}
res.json(json)
})
})
正如我上面所说,当我获取数据时没有错误密码仍然只是简单的明文,而不是哈希。当我在函数内部使用 console.log(user.password)
时,它会返回哈希值。
我刚刚开始学习后端知识(我是一名前端开发人员)所以也非常感谢您的任何建议 - 谢谢!
经典节点回调搞砸了。在生成哈希之前调用 next() 回调!
presave 函数需要像这样:
userSchema.pre("save", function(next) {
var user = this
if (!user.isModified('password')) return callback()
bcrypt.genSalt(10, function(err, salt) {
if (err) return next(err)
bcrypt.hash(user.password, salt, function(err, hash) {
if (err) return next(err)
user.password = hash
const currentDate = new Date
user.updated_at = currentDate
next()
})
})
})