Bcrypt没有加密Node JS中的密码

时间:2016-11-12 19:50:00

标签: javascript node.js passport.js bcrypt

我正在尝试在节点中创建用户帐户系统,并且正在使用bcrypt进行散列密码。我的语法似乎是正确的,并且控制台中没有抛出任何错误,但是当存储在数据库(mongo db)中时,密码仍然没有加密。

这是我在模型中的user.js文件:



def read_file(filename):
    thefile = open(filename)
    data = []
    for line in thefile: 
        data.append(line)
    thefile.close()

    return data



    Example database:

{'Leonardo  da  Vinci': [('Mona Lisa', 1503,    
76.8, 53.0, 'oil paint', 'France'), ('The   
Last Supper', 1495, 460.0, 880.0, 'tempera',    
'Italy')]}




这是在登录部分使用的路由中的users.js文件的相关部分,用于检查用户名和密码是否匹配(也不起作用):



var mongoose = require('mongoose');
var bcrypt = require('bcrypt');

mongoose.connect('mongodb://localhost/nodeauth');

var db = mongoose.connection;

// User
var UserSchema = mongoose.Schema({
	username: {
		type: String,
		index: true
	},
	password: {
		type: String,
		required: true,
		bcrypt: true
	},
	email: {
		type: String
	},
	name: {
		type: String
	},
	profileImage: {
		type: String
	}

});

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

module.exports.comparePassword = function(candidatePassword, hash, callback) {
	bcrypt.compare(candidatePassword, hash, function(err, isMatch) {
		if(err) return callback(err);
		callback(null, isMatch);
	});
}

module.exports.getUserById = function(id, callback) {
	User.findById(id, callback);
}

module.exports.getUserByUsername = function(username, callback) {
	var query = {username: username};
	User.findOne(query, function(err, user) {
    callback(err, user);
  });
}

module.exports.createUser = function(newUser, callback) {

	bcrypt.hash(newUser.password, 10, function(err, hash) {
		if(err) throw err;

		// Set hashed password
		newUser.password = hash;

		// Create user
		newUser.save(callback);
	});

}




我无法理解为什么密码没有加密,即便如此,为什么comparePassword总是会返回失败,因此每次都会使身份验证失败。 有什么我想念的吗?

0 个答案:

没有答案