2017-10-01 10 views
0

ユーザの作成時にユーザパスワードをハッシュしたいと思います。ユーザーが作成されますが、パスワードは、なぜ私は理解していないハッシュされていません。..ここに私のコードです:nodejs bcryptがdbでパスワードをハッシングしない

ここ
var mongoose = require('mongoose'); 
var jwt = require('jsonwebtoken'); 
var User = mongoose.model('User'); 
var config = require('../../config/config'); 
var bcrypt = require('bcrypt'); 
var SALT_WORK_FACTOR = 10; 

exports.create_a_user = function(req, res) { 
    var user = new User(req.body); 
user.schema.pre('save', function(next){ 
var user = this; 
if (!user.isModified('password')) return next(); 

bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt){ 
    if(err) return next(err); 

    bcrypt.hash(user.password, salt, function(err, hash){ 
     if(err) return next(err); 

     user.password = hash; 
     next(); 
    }); 
    }); 
}); 


user.save(function(err, user) { 
     if (err){ 
      res.send(err); 
     } 
     res.json(user); 
    }); 
}; 

私のユーザモデル:

module.exports = mongoose.model('User', new Schema({ 
    lastname: { 
     type: String, 
     validate: { 
     validator: function(v) { 
      return /^([a-zA-ZàáâäæçéèêëîïôœùûüÿÀÂÄÆÇÉÈÊËÎÏÔŒÙÛÜŸ \-\']+)$/.test(v); 
     }, 
     message: 'Le champ {PATH} ne doit pas contenir de caractères spéciaux ou de chiffres !' 
     }, 
     required: [true, "Le champ nom de famille est requis"] 
    }, 

    firstname: { 
     type: String, 
     validate: { 
     validator: function(v) { 
      return /^([a-zA-ZàáâäæçéèêëîïôœùûüÿÀÂÄÆÇÉÈÊËÎÏÔŒÙÛÜŸ \-\']+)$/.test(v); 
     }, 
     message: 'Le champ {PATH} ne doit pas contenir de caractères spéciaux ou de chiffres !' 
     }, 
     required: [true, "Le champ prénom est requis"] 
    }, 

    mail: { 
     type: String, 
     validate: { 
     validator: function(v) { 
      return /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/.test(v); 
     }, 
     message: '{VALUE} n\'est pas une adresse mail valide!' 
     }, 
     required: [true, "L'email est requis"] 
    }, 

    password: { 
     type: String, 
     required: [true, "Le mot de passe est requis"] 
    }, 

    phone: { 
     type: String, 
     validate: { 
      validator: function(v) { 
      return /^0[0-9]([-. ]?\d{2}){4}[-. ]?$/.test(v); 
      }, 
      message: '{VALUE} n\'est pas un numéro de téléphone valide!' 
     }, 
     required: [true, 'Le numéro de téléphone est requis'] 
     }, 

})); 

そして、私形式:

<form method="post" action="/api/v1/user/register"> 
    <input type="text" name="lastname" placeholder="lastname"><br> 
    <input type="text" name="firstname" placeholder="firstname"><br> 
    <input type="text" name="adress" placeholder="adress"><br> 
    <input type="text" name="mail" placeholder="mail"><br> 
    <input type="password" name="password" placeholder="password"><br> 
    <input type="text" name="phone" placeholder="phone"><br> 
    <input type="date" name="birthdate" placeholder="birthdate"><br> 
    <input type="submit" value="Connection"> 

私はさまざまなサイトを使いましたが、方法は常に同じです。また、前に.schemaを付けずに ".pre()"関数を認識しないと、create userは動作しますが、ハッシュパスワードは使用されません。誰にもアイデアはありますか?

答えて

1

モデルをエクスポートする前に、スキーマにプリセーブフックを設定する必要があります。

Userモデル:私はあなたの答えのための

var UserSchema = new Schema({ 
    ... 
}) 

UserSchema.pre('save', function(next) { 

    var user = this 

    if (!user.isModified('password')) return next() 

    bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt) { 

    if (err) return next(err) 

    bcrypt.hash(user.password, salt, function(err, hash) { 

     if(err) return next(err) 

     user.password = hash 

     next() 

    }) 

    }) 

}) 

module.exports = mongoose.model('User', UserSchema) 
+0

Thxを、それが言うこと:** VARユーザーは=必要(」./パス:ユーザーは、このようなあなたのモデルをインポートしてみ –

+0

定義されていません。/to/model/User ')** –

関連する問題