我正在使用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数据库交叉检查了所有值,一切都匹配。但找不到原因。
答案 0 :(得分:2)
将此内容添加到if condition
上方,并检查您的陈述是否真实。我认为您的数据类型可能不同,例如user.code
和code
。因此,您还应该使用==
或解析您的值进行测试。
// 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');
}
有关==
和===
的区别的更多信息,请查看以下答案: