使用mongoose将值作为参数发送到mongodb中以检查是否存在

问题描述 投票:0回答:2

嗨,我正在使用lambda函数来检查在本地运行的mongodb中的用户名和密码。

module.exports.handler = (event, context, callback) => {
  console.log('login');
  const { username, password } = JSON.parse(event.body);
  console.log("username--->",username);
  console.log("password-->",password)

  try {
    // Authenticate user
    const user = users.login(username, password);
    console.log("----->inside login handler!!!",user);

这是我发送值来检查数据库的地方

login = function (username, password) {
    console.log("--------inside login of users",username,password)
    userRegister.findOne({
      username : username,
      password : password
    }).then(function(err,data){
      if (err) {
        console.log("---------------err", err)
        return _.omit(err);
      }
      else {
        console.log("---------------data", data)
        return _.omit(data);
      }
    })
  }

价值没有返回任何东西,我得到未定义!我认为findOne不起作用!

提前致谢

node.js mongodb mongoose lambda
2个回答
1
投票

使用find和用户提供的值会使您容易进行注射,例如:

"username": {"$gt": ""}
"password": {"$gt": ""}

我会使用像passport本地身份验证的第三方。

您至少可以通过用户名找到用户,然后使用'==='验证用户名和密码。

至于findOne返回undefined,尝试使用像Robomongo这样的工具执行相同的查询,你的语法似乎是正确的。


0
投票

为什么要匹配密码。在findOne中,我相信您应该在将密码存储到数据库之前对其进行哈希处理。如果不是我天堂般的建议这样做。使用散列库找到文档后匹配密码

 login = function (username, password) {
    console.log("--------inside login of users",username,password)
    userRegister.findOne({
      username : username // Remove password from here
    }).then(function(err,data){
      if (err) {
        console.log("---------------err", err)
        return _.omit(err);
      }
      else {
        // Match password here
        console.log("---------------data", data)
        return _.omit(data);
      }
    })
   }
© www.soinside.com 2019 - 2024. All rights reserved.