私はNode.js、Mongoose、MongoDb、Expressを使ってアプリケーションを開発しています。dbに保存する前にパスワードがハッシュされていません
ユーザー登録時にdbに保存される前にパスワードをハッシュしようとしていますが、動作していないようです。パスワードはハッシュせずに保存されます。あなたはnext()
コールバックbcrypt.hash
前に呼び出されないため
'use strict'
let mongoose = require('mongoose')
let bcrypt = require('bcrypt-nodejs')
var Schema = mongoose.Schema
var userSchema = Schema({
name: { type: String, required: true, unique: true },
password: { type: String, required: true },
createdAt: {
type: Date,
require: true,
default: Date.now
}
})
// check if user already exists
userSchema.path('name').validate(function (name) {
User.findOne({name}, function (err, user) {
if (err) {
console.log('error')
} if (user) {
console.log('The user already exists')
console.log(user)
}
})
}, 'The user already exists')
// password validation
userSchema.path('password').validate(function (password) {
return password.length >= 6
}, 'The password must be of minimum length 6 characters.')
var User = mongoose.model('User', userSchema)
// hashing and adding salt pre save()
userSchema.pre('save', function (next) {
bcrypt.genSalt(10, function (err, salt) {
if (err) {
return next(err)
}
bcrypt.hash(this.password, salt, null, function (err, hash) {
// Store hash in your password DB.
if (err) {
return next(err)
}
// set the password to the hash
this.password = hash
})
next()
})
})
module.exports = User
私は何事もなかっそれを移動!私は何かすべきことがありますか?多分server.jsにそれを必要としますか? – sasuri
はいモジュール '.exports = User'と' userSchema.pre(... 'の下に' var User = mongoose.model( 'User'、userSchema) 'を動かしてみてください – Stamos
ありがとう! – sasuri