2017-12-27 196 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