我正在为应用创建用户模型。我的用户架构是:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const bcrypt = require('bcrypt-nodejs');
SALT_WORK_FACTOR = 10;
const userSchema = Schema({
email:{type: String, required: true},
encrypted_password:{type: String, required: true},
reset_password_token:{type: String},
reset_password_sent_at:{type: Date},
sign_in_count:{type: Number},
current_sign_in_at:{type: Date},
last_sign_in_at:{type: Date},
current_sign_in_ip:{type: String},
last_sign_in_ip:{type: String},
active:{type: Boolean},
role_id:[{ type: Schema.Types.ObjectId, ref: 'roles' ,required: true}],
create_date:{type: Date, default: Date.now},
});
这是我的创建方法:
module.exports.insert = (user, callback) => {
User.create(user,callback);
}
我添加此函数来散列密码,但不起作用:
User.pre('create', function(next) {
var user = this;
// only hash the password if it has been modified (or is new)
if (!user.isModified('encrypted_password')) return next();
// generate a salt
bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt) {
if (err) return next(err);
// hash the password using our new salt
bcrypt.hash(user.encrypted_password, salt, function(err, hash) {
if (err) return next(err);
// override the cleartext password with the hashed one
user.encrypted_password = hash;
next();
});
});
});
我收到错误
User.pre不是函数。
如何使用create function存储加密密码以保存数据。
提前致谢
答案 0 :(得分:2)
中间件(也称为前后挂钩)是函数 在执行异步函数期间传递控制。的中间件 在架构级别指定,对编写插件很有用
应该在架构级别指定,而不是在模型上指定:
userSchema.pre('create', function(next) {
....
});
答案 1 :(得分:0)
在您的用户架构文件中尝试此操作:
var hashPass = function (value) {
return bcrypt.hashSync(value);
}
并将您的密码定义到您的架构中,如下所示:
encrypted_password:{type: String, required: true, set: hashPass}
创建文档时会自动创建加密密码。
答案 2 :(得分:0)
我们可以使用这个简单的逻辑来使用bcrypt创建加密密码:
exports.generateEncrytPassword = (password) => {
console.log("passsword", password)
return bcrypt.hashSync(password, bcrypt.genSaltSync(9));
}