【发布时间】:2017-06-12 01:03:27
【问题描述】:
我正在开发一个平均堆栈应用程序,并且我在硬编码的数据库中有一个用户名和密码。我想加密该密码并将其存储回数据库中。 (使用 mongoDB、AngularJS、nodeJS) 有什么建议吗?
【问题讨论】:
标签: angularjs node.js mongodb mongoose
我正在开发一个平均堆栈应用程序,并且我在硬编码的数据库中有一个用户名和密码。我想加密该密码并将其存储回数据库中。 (使用 mongoDB、AngularJS、nodeJS) 有什么建议吗?
【问题讨论】:
标签: angularjs node.js mongodb mongoose
假设您使用的是 angularjs 和 node,您可以使用来自 npm 的 mongoose(https://www.npmjs.com/package/mongoose) 来映射您的数据。然后您可以使用 bcrypt(https://www.npmjs.com/package/bcrypt) 安全地存储您的密码。
bcrypt 也有盐,所以如果你想防止暴力破解,你可以研究一下。
var mg = require('mongoose');
var bcrypt = require('bcrypt');
var SALT_FACTOR = 10;
mg.connect('mongodb://localhost');
var db = mg.connection;
db.on('error', function(err){
console.log('error', err);
});
db.once('open', function(){
console.log('Connection successful');
});
var Schema = mg.Schema;
var mySchema = new Schema({
name:String,
password:String
});
var User = mg.model('User', mySchema);
mySchema.pre('save', function(next){
var user = this;
if (!user.isModified('password')) return next();
bcrypt.genSalt(SALT_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();
});
});
});
var testdata = new User({
name: "root",
password: "123456"
});
testdata.save(function(err, data){
if(err) console.log(err);
else console.log ('WOHOO:' , data);
});
【讨论】:
它不叫加密,而是散列。为此,您可以在 nodejs 中使用 bcrypt 模块。为了散列密码
var bcrypt = require('bcrypt');
const saltRounds = 10;
bcrypt.hash(passwordFromSignup, saltRounds, function(err, hash) {
// store hash in database
});
为了验证用户密码
bcrypt.compare(passwordFromLogin, hashFromDatabase, function(err, res) {
// res evaluates to `true` if successfull login
});
【讨论】: