亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法通過承諾從 nodejs 中的 bcrypt.compare() 函數返回數據

無法通過承諾從 nodejs 中的 bcrypt.compare() 函數返回數據

RISEBY 2022-06-16 10:06:08
我目前正在使用 nodejs (10.15.2) 構建一個應用程序,但我在登錄功能方面遇到了一些問題。我的“dbconnector.js”文件中的片段:login(email, password) {    return userModel.findOne({      email: email    }).lean().then(function(user) {      // return user;      return bcrypt.compare(password, user.password, function(err, res) {           if (res) {              console.log(user); //prints the userinfo - works fine              return user;          }        });    });};我的 serve.js 文件中的片段:app.post('/login', async (req, res) => {    var { email, password } = req.body;    var user = await dbconnector.login(email,password);    console.log(user) //returns undefined    if (user != false) {      console.log("loggedin");        const accessToken = jwt.sign({ email: user.email,  id: user.id }, key.tokenKey);        res.json({            accessToken        });    } else {        res.send('Username or password incorrect');    }});我的問題是login() -函數返回未定義。但是,當我將其更改為以下內容時,它可以完美運行(只是不檢查密碼......):  login(email, password) {    return userModel.findOne({      email: email    }).lean().then(function(user) {    return user;    });};所以我知道 bcrypt / promise 部分有問題,但我找不到解決方案。
查看完整描述

1 回答

?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

我的兄弟,問題在于一個承諾只會給你返回另一個承諾,而你在那里的比較回調正如它的名字所說的回調不是承諾。讓我們成為一個承諾



login(email, password) {

    return userModel.findOne({

      email: email

    }).lean().then(function(user) {

      // return user;

      return new Promise((resolve, reject) => {

          return bcrypt.compare(password, user.password, (err, res) => {

              if (err) {

                  return reject(err);

              }


              return resolve(res);

        })

};


但?。?!如果您正在使用的 bcrypt 包是這個 https://www.npmjs.com/package/bcrypt 那么您不必承諾該方法,它已經將其作為承諾



login(email, password) {

    return userModel.findOne({

      email: email

    }).lean().then(function(user) {

      return bcrypt.compare(password, user.password);

    }).then(isEquals => {

        if (isEquals) {

            return true

        }


        return false

    }).catch(error => {

        throw error;

    })

};


查看完整回答
反對 回復 2022-06-16
  • 1 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號