首页 > 解决方案 > 当数据应该返回 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 值相等,但该函数每次仍返回“未找到用户”。

标签: javascriptfirebase-realtime-databasegoogle-cloud-functions

解决方案


Firebase 控制台日志确认 pendingUser.hash 和 hash 值相等

目视扫描日志输出不足以验证 100% 的值是否真正相等。以下是 JavaScript 运算符的值可能不同的一些情况===

  1. 如果一个值是字符串而另一个是整数,则它们将不相等,尽管日志记录输出可能会以这种方式出现。
  2. 如果在任一字符串之后有一些尾随空格,则它们将不相等,尽管日志输出可能会以这种方式显示。

由于我们在 Stack Overflow 上实际上看不到这些值,因此您需要深入研究并找出为什么这两个值根据===运算符并不真正相等。因此,请确保您的数据库值实际上并未存储为数字,并尝试检查字符串的长度以查看它们是否真的匹配。


推荐阅读