登录和密码验证 NodeJS
Login and password validation NodeJS
我是初学者,正在尝试使用 Webix 和 NodeJS 制作登录表单。
当post请求到达服务器时,服务器比较请求数据和来自.json文件的数据,当有相同的登录和时,应该在控制台中写入'OK'密码。
问题是即使密码或登录名来自另一个用户,它也会写入 'ok'。所以我可以写一个用户的登录名和另一个用户的密码,它会给我一个肯定的答案。
如何让它从一个json对象中搜索登录名和密码?
代码:
if (login == "login") {
fs.readFile("JSON/DB.json", "utf8", function (err, data) {
//console.log(data);
var jsonFileArr = []; // Array with .json objects
jsonFileArr = JSON.parse(data);
var gotLog = jsonFileArr.some(function (obj) {
/* Searches for the same login*/
return obj.log == loginData.log;
})
var gotPass = jsonFileArr.some(function (obj) {
/* Searches for the same password */
return obj.pass == loginData.pass;
})
if (gotLog && gotPass) {
console.log("OK");
}
else
console.log("Wrong login or password");
});
}
else {
console.log("Error");
}
JSON : http://myjson.com/21rvm
对我来说,首先匹配用户名然后检查适当的密码似乎更合乎逻辑。特别是如果您考虑对其进行加密。
这不是直接的答案,但这是我不久前写的类似内容的示例:
server.post('/auth/login', function(req,res) {
const username = req.body.username;
const password = req.body.password;
if(testEmail(username)){
dataFacade.getUser({'username' : username}, function(user) {
if (user) {
if (bcrypt.compareSync(password, user.password)) {
req.login({'id': user._id, 'username': user.username, 'permission': user.permission}, function(err) {
if (err) {
return res.status(400).send(err);
} else {
res.cookie('user', user, cookieParams);
return res.status(200).send(user);
}
});
} else {
return res.status(401).send('notAllowed');
}
} else {
return res.status(400).send('notFound');
}
});
} else {
return res.status(401).send('notAllowed');
}
}
);
所以这有三层:
正在测试用户名是否有效(您可以使用与前端相同的正则表达式)
查看该用户名是否已经存在
匹配密码,最好加密
我使用了数据外观来检索它们之间的数据,但是您可以对循环执行相同的操作,因为您似乎没有使用数据库。虽然我强烈建议您将其存储在某种数据库中。
我是初学者,正在尝试使用 Webix 和 NodeJS 制作登录表单。
当post请求到达服务器时,服务器比较请求数据和来自.json文件的数据,当有相同的登录和时,应该在控制台中写入'OK'密码。
问题是即使密码或登录名来自另一个用户,它也会写入 'ok'。所以我可以写一个用户的登录名和另一个用户的密码,它会给我一个肯定的答案。
如何让它从一个json对象中搜索登录名和密码? 代码:
if (login == "login") {
fs.readFile("JSON/DB.json", "utf8", function (err, data) {
//console.log(data);
var jsonFileArr = []; // Array with .json objects
jsonFileArr = JSON.parse(data);
var gotLog = jsonFileArr.some(function (obj) {
/* Searches for the same login*/
return obj.log == loginData.log;
})
var gotPass = jsonFileArr.some(function (obj) {
/* Searches for the same password */
return obj.pass == loginData.pass;
})
if (gotLog && gotPass) {
console.log("OK");
}
else
console.log("Wrong login or password");
});
}
else {
console.log("Error");
}
JSON : http://myjson.com/21rvm
对我来说,首先匹配用户名然后检查适当的密码似乎更合乎逻辑。特别是如果您考虑对其进行加密。
这不是直接的答案,但这是我不久前写的类似内容的示例:
server.post('/auth/login', function(req,res) {
const username = req.body.username;
const password = req.body.password;
if(testEmail(username)){
dataFacade.getUser({'username' : username}, function(user) {
if (user) {
if (bcrypt.compareSync(password, user.password)) {
req.login({'id': user._id, 'username': user.username, 'permission': user.permission}, function(err) {
if (err) {
return res.status(400).send(err);
} else {
res.cookie('user', user, cookieParams);
return res.status(200).send(user);
}
});
} else {
return res.status(401).send('notAllowed');
}
} else {
return res.status(400).send('notFound');
}
});
} else {
return res.status(401).send('notAllowed');
}
} );
所以这有三层:
正在测试用户名是否有效(您可以使用与前端相同的正则表达式)
查看该用户名是否已经存在
匹配密码,最好加密
我使用了数据外观来检索它们之间的数据,但是您可以对循环执行相同的操作,因为您似乎没有使用数据库。虽然我强烈建议您将其存储在某种数据库中。