javascript - 当数据应该返回 true 时,为什么我的 Firebase 函数一直返回 false?
问题描述
在注册我的网络应用程序后,我正在编写一个 Firebase 函数来验证用户的电子邮件,但是即使在检查注册时创建的唯一哈希与我的函数 URL 中的查询匹配之后,该函数在应该返回时仍然返回 false真正的即用户找到
在异步/等待和承诺方面,我是一个相对新手,我尝试在代码中的不同位置使用它们,但没有效果。
exports.verifyMail = functions.https.onRequest((req, res) => {
cors(req, res, () => {
const hash = req.query.hash;
const pendingUserKey = req.query.pendingUserKey;
var pendingUser;
admin
.database()
.ref('pending/' + pendingUserKey)
.once('value', snapshot => {
pendingUser = snapshot.val();
})
.then(function() {
console.log(pendingUser);
console.log(pendingUser.hash);
console.log(hash);
if (pendingUser.hash === hash) {
return res.send('User hash matches');
} else {
return res.send('User not found');
}
})
.catch(error => {
console.log(error);
});
});
});
预期结果是已在数据库中找到用户。Firebase 控制台日志确认 pendingUser.hash 和 hash 值相等,但该函数每次仍返回“未找到用户”。
解决方案
Firebase 控制台日志确认 pendingUser.hash 和 hash 值相等
目视扫描日志输出不足以验证 100% 的值是否真正相等。以下是 JavaScript 运算符的值可能不同的一些情况===
:
- 如果一个值是字符串而另一个是整数,则它们将不相等,尽管日志记录输出可能会以这种方式出现。
- 如果在任一字符串之后有一些尾随空格,则它们将不相等,尽管日志输出可能会以这种方式显示。
由于我们在 Stack Overflow 上实际上看不到这些值,因此您需要深入研究并找出为什么这两个值根据===
运算符并不真正相等。因此,请确保您的数据库值实际上并未存储为数字,并尝试检查字符串的长度以查看它们是否真的匹配。
推荐阅读
- ios - 如何在快速注册时根据该电话号码检索uid
- regex - Regex to match and split every third occurrence of a string
- wordpress - 在 WooCommerce 中隐藏特定类别的价格和仅从该类别购买的特定用户角色
- c++ - 访问嵌套私有类的数据
- c++ - Can two enums not have a member of similar name?
- ios - 如何使模拟器具有本地设置?
- kotlin - 如何在 Kotlin 中将功能接口实现为 lambda?
- powerbi - Table of starting dates of each month in PBI
- javascript - Average of nested objects values in Javascript
- swift - 如何对 NS* Cocoa 类制作的位图进行稳健测试?