我正在使用 ES6 开发 Node.js应用程序。
在保存到 MongoDB 之前,使用bcrypt-nodejs加密和解密密码。
有Schema定义:
import mongoose from 'mongoose'
import bcrypt from 'bcrypt-nodejs'
const Schema = mongoose.Schema
let userSchema = new Schema({
username: {
type: String,
min: 6,
max: 20,
unique: true,
required: true,
dropDups: true
},
password: {
type: String,
min: 6,
max: 20
}
})
// generate password hash
userSchema.methods.generateHash = password => bcrypt.hashSync(password, bcrypt.genSaltSync(8), null)
// checking if password is valid
userSchema.methods.validPassword = password => bcrypt.compareSync(password, this.password)
export default mongoose.model('User', userSchema)
当我想验证用户密码时,我会调用以下功能:
if (!user.validPassword(req.body.password)) {
console.error(`Authentication failed. Wroong password for user '${req.body.username}'`)
}
然后发生了错误:
events.js:182
throw er; // Unhandled 'error' event
^
TypeError: Cannot read property 'password' of undefined
我认为此问题是由ES6 syntax
引起的,this
未定义。但我不知道如何解决它。
提前谢谢大家。