即使If语句条件有效,也会执行其他语句

时间:2019-01-05 16:21:18

标签: javascript firebase google-cloud-platform

我正在使用Google Cloud功能来验证我的OTP身份验证,还在使用Firebase数据库将代码保存在数据库中。

我的问题是,即使满足If语句条件,它也总是执行else语句。我正在将Firebase数据库中的代码和codeValid与用户输入进行比较。因此,我的用户输入对代码感到满意,并且对codevalid也感到满意,但是它始终移至else语句。我不知道为什么。

这是我的代码

const admin = require('firebase-admin');

module.exports = function(req, res) {
if(!req.body.phone || !req.body.code) {
    return res.status(422).send({error: 'Phone and Code Must be 
Provided'});
 }

const phone = String(req.body.phone).replace(/[^\d]/g, '');
const code = parseInt(req.body.code);

return admin.auth().getUser(phone) 
    .then(() => {
        const ref = admin.database().ref('users/'+ phone);
       return ref.on('value', snapshot => {
            ref.off();
            const user = snapshot.val();

            if (user.code === code && user.codeValid === true) {
                ref.update({ codeValid: false });
                admin.auth().createCustomToken(phone)
                    .then(token => res.send({ token: token }))
                    .catch((err)=> res.status(422).send({ error:err }));
            }
            else {
                return res.status(422).send({ error: 'Code Not Valid' });
            }
        });
    })
    .catch((err)=> res.status(422).send({ error:err }) )
 } 

所以,无论输入什么,我总是得到“代码无效”的信息。我也与firebase数据库交叉检查了所有值,一切都匹配。但找不到原因。

1 个答案:

答案 0 :(得分:2)

将此内容添加到if condition上方,并检查您的陈述是否真实。我认为您的数据类型可能不同,例如user.codecode。因此,您还应该使用==解析您的值进行测试。

// values and datatypes are equal
if (user.code === code) { 
  console.log('user.code === code');         
}

// values and datatypes are equal
if (user.codeValid === true) {
  console.log('user.codeValid === codeValid');
}

// values are equal
if (user.code == code) {
  console.log('user.code == code');         
}

// values are equal
if (user.codeValid == true) {
  console.log('user.codeValid == codeValid');
}

有关=====的区别的更多信息,请查看以下答案:

Difference between == and === in JavaScript