登录和密码验证 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');
}

} );

所以这有三层:

  1. 正在测试用户名是否有效(您可以使用与前端相同的正则表达式)

  2. 查看该用户名是否已经存在

  3. 匹配密码,最好加密

我使用了数据外观来检索它们之间的数据,但是您可以对循环执行相同的操作,因为您似乎没有使用数据库。虽然我强烈建议您将其存储在某种数据库中。