2017-12-27 198 views
0

嗨我使用lambda函数检查在本地运行的mongodb中的用户名和密码。发送值作为参数,以检查是否存在或不使用猫鼬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); 

这就是我发送的值在DB检查

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不工作,我想!

在此先感谢

回答

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); 
     } 
    }) 
    } 
1

使用发现由用户提供的值让你打针容易找到文档后,例如:

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

我会使用第三方像passport本地认证。

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

至于findOne返回undefined,尝试使用类似Robomongo的工具执行相同的查询,您的语法看起来是正确的。

+0

“用户名”:{“$ gt”:“”} “password”:{“$ gt”:“”}我不明白,你在说什么 – Grijan

+0

有了这个查询,能够在数据库中与第一位用户一起登录,而不必知道其凭证。 (任何字符串都大于空字符串)如果您熟悉SQL注入,它相当于'或1 == 1' – Tai