2016-09-17 82 views
1

我正在使用JWT身份驗證創建用戶註冊。我正在使用bcrypt-node模塊進行密碼哈希和醃製。bcrypt-node拋出錯誤「沒有給出回調函數」

useraModel.js

var mongoose =require('mongoose'); 
var Schema  =mongoose.Schema; 
var bcrypt  =require('bcrypt-node'); 

var UserSchema=new Schema({ 
    name:{type:String, unique:true, required:true}, 
    password:{type:String, required:true} 
}); 

    UserSchema.pre('save', function (next) { 
     var user = this; 
     if (this.isModified('password') || this.isNew) { 
      bcrypt.genSalt(10, 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(); 
       }); 
      }); 
     } else { 
      return next(); 
     } 
    }); 

    UserSchema.methods.comparePassword = function (passw, cb) { 
     bcrypt.compare(passw, this.password, function (err, isMatch) { 
      if (err) { 
       return cb(err); 
      } 
      cb(null, isMatch); 
     }); 
    }; 

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

passport.js

var JwtStrategy  =require('passport-jwt').Strategy; 
var User    =require('../app/models/user'); 
var config   =require('../config/database'); 

module.exports=function(passport){ 
     var opts = {}; 
    opts.secretOrKey = config.secret; 
    passport.use(new JwtStrategy(opts, function(jwt_payload, done) { 
    User.findOne({id: jwt_payload.id}, function(err, user) { 
      if (err) { 
       return done(err, false); 
      } 
      if (user) { 
       done(null, user); 
      } else { 
       done(null, false); 
      } 
     }); 
    })); 
}; 

app.js

apiRoutes.post('/signup', function(req, res) { 
    if (!req.body.name || !req.body.password) { 
    res.json({success: false, msg: 'Please pass name and password.'}); 
     } else { 
       var newUser = new User({ 
           name: req.body.name, 
           password: req.body.password 
         }); 
    // save the user 
     newUser.save(function(err) { 
     if (err) { 
       return res.json({success: false, msg: 'Username already exists.'}); 
       } 
       res.json({success: true, msg: 'Successful created new user.'}); 
       }); 
      } 
     }); 

當我運行這段代碼的顯示錯誤 -

throw "No callback function was given". 

No Callback function was given 

請幫我解決這段代碼。 感謝

+0

需要在你的問題的堆棧跟蹤和方法在代碼中找出行號。 –

回答

14

bcrypt.hash()需要4個參數:

hash(data, salt, progress, cb) 

的文檔還不清楚這個:它指出datasaltcb是必需的,這意味着progress不是,但沒有它,你會得到錯誤。

傳遞一個null如果你不關心跟蹤進展:

bcrypt.hash(user.password, salt, null, function (err, hash) { ... }) 
+0

非常感謝..'null'正在爲我工​​作..現在用戶正在創建成功。 –

+0

bcrypt-node看起來無效..?但bcrypt看起來很活躍https://github.com/kelektiv/node.bcrypt.js/,但有很多錯誤,請問你用什麼? – stackdave