2017-12-07 15 views
2

私は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 

答えて

3

その。 next()bcrypt.hashコールバックに移動します。コールバックを使用しているとき

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() 
     }) 

    }) 
}) 
+0

私は何事もなかっそれを移動!私は何かすべきことがありますか?多分server.jsにそれを必要としますか? – sasuri

+1

はいモジュール '.exports = User'と' userSchema.pre(... 'の下に' var User = mongoose.model( 'User'、userSchema) 'を動かしてみてください – Stamos

+0

ありがとう! – sasuri

2

next()bcrypt.hash()メソッド内で呼び出さなければなりません。同期のために

userSchema.pre('save', (next) => { 
    const salt = bcrypt.genSaltSync(10) 
    const hash = bcrypt.hashSync(this.password, salt) 

    this.password = hash 
    next() 
}) 
関連する問題