繁体   English   中英

nodejs bcrypt不哈希数据库中的密码

[英]nodejs bcrypt not hashing password in 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-\.]+@([\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()”函数,然后创建用户可以使用,但没有任何哈希密码。 有人有什么想法吗?

在导出模型之前,应在架构上设置预保存钩子。

用户模型:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM