Mean stack:Bcrypt 没有散列我的密码
Mean stack: Bcrypt is not hashing my password
连接正常,我可以等post一个新用户,编辑它们。现在我想使用 bcrypt 来 "crypt" 我 mongoDB 中的密码。我做错了什么?
在我的 app.js 文件中
我确实有“ var bcrypt = require('bcrypt');”我也参考了 mongoose、express 和它应该做的一切
代码:
app.post('/api/user', (req, res) => {
res.redirect('http://localhost:4200/');
var newUserData = { username: req.body.username, password: req.body.password, mail: req.body.mail, role: "user" };
const saltRounds = 10;
var hash = bcrypt.hashSync(newUserData.req.body.password, saltRounds);
bcrypt.compareSync(newUserData.req.body.password, hash);
var user = new User(newUserData, function(err) {
});
user.save();
});
您忘记将新生成的 hash
分配给该用户的密码。它不会自动为您执行此操作。
您应该在获得 hash
之后和创建用户对象之前执行类似的操作。
var hash = bcrypt.hashSync(newUserData.password, saltRounds);
newUserData.password = hash;
此外,像这样在此处调用 bcrypt.compareSync
是没有意义的,在散列的情况下,您可能应该使用异步版本,因为该操作非常昂贵,您不希望它阻塞主线程。
这应该可以完成您的工作:
app.post('/api/user', (req, res) => {
res.redirect('http://localhost:4200/');
const saltRounds = 10;
var hash = bcrypt.hashSync(req.body.password, saltRounds);
var newUserData = { username: req.body.username, password: hash, mail: req.body.mail, role: "user" };
var user = new User(newUserData, function(err) {
});
user.save();
});
更好(推荐)的方法是异步执行:
bcrypt.hash(req.body.password, saltRounds, (err, hash) => {
if (err) {
console.log(err);
return;
}
var newUserData = { username: req.body.username, password: hash, mail: req.body.mail, role: "user" };
var user = new User(newUserData, function(err) {
});
user.save();
});
});
连接正常,我可以等post一个新用户,编辑它们。现在我想使用 bcrypt 来 "crypt" 我 mongoDB 中的密码。我做错了什么?
在我的 app.js 文件中
我确实有“ var bcrypt = require('bcrypt');”我也参考了 mongoose、express 和它应该做的一切
代码:
app.post('/api/user', (req, res) => {
res.redirect('http://localhost:4200/');
var newUserData = { username: req.body.username, password: req.body.password, mail: req.body.mail, role: "user" };
const saltRounds = 10;
var hash = bcrypt.hashSync(newUserData.req.body.password, saltRounds);
bcrypt.compareSync(newUserData.req.body.password, hash);
var user = new User(newUserData, function(err) {
});
user.save();
});
您忘记将新生成的 hash
分配给该用户的密码。它不会自动为您执行此操作。
您应该在获得 hash
之后和创建用户对象之前执行类似的操作。
var hash = bcrypt.hashSync(newUserData.password, saltRounds);
newUserData.password = hash;
此外,像这样在此处调用 bcrypt.compareSync
是没有意义的,在散列的情况下,您可能应该使用异步版本,因为该操作非常昂贵,您不希望它阻塞主线程。
这应该可以完成您的工作:
app.post('/api/user', (req, res) => {
res.redirect('http://localhost:4200/');
const saltRounds = 10;
var hash = bcrypt.hashSync(req.body.password, saltRounds);
var newUserData = { username: req.body.username, password: hash, mail: req.body.mail, role: "user" };
var user = new User(newUserData, function(err) {
});
user.save();
});
更好(推荐)的方法是异步执行:
bcrypt.hash(req.body.password, saltRounds, (err, hash) => {
if (err) {
console.log(err);
return;
}
var newUserData = { username: req.body.username, password: hash, mail: req.body.mail, role: "user" };
var user = new User(newUserData, function(err) {
});
user.save();
});
});