【问题标题】:Firebase test auth cloud functions locallyFirebase 在本地测试身份验证云功能
【发布时间】:2020-10-25 09:31:54
【问题描述】:
exports.sendWelcomeEmail = functions.auth.user().onCreate((user) => {
  console.log(user.uid);
  console.log(user.email);
  console.log(user.displayName);
});

exports.getUserInfo = functions.https.onCall(async (data, context) => {
  // get array of user IDs and returns information (from Users collection)
  const userIDs = data.userIDs;
  const result = [];
  const querySnapData = await admin.firestore().collection("Users").get();
  querySnapData.forEach((ele) => {
    if (userIDs.indexOf(ele.id) !== -1 && ele.id !== context.auth.uid) {
      result.push(ele.data());
    }
  });
  return { res: result };
});

我的项目中有这两个函数 - 一个是可调用函数,另一个是身份验证触发函数。

所以在我的客户端应用程序中,我运行

firebase.functions().useFunctionsEmulator('http://localhost:5001');

let getUserInfo = functions.httpsCallable('getUserInfo');
getUserInfo({userIDs: data}).then(res => doSomething);

并在本地运行云功能

firebase emulators:start

但它说

functions[sendWelcomeEmail]: function ignored because the auth emulator does not exist or is not running.

所以在客户端 App 中,getUserInfo 运行良好,但无法触发 onCreate

但我找不到任何关于 auth emulator 的文档。

感谢任何链接/文章/视频或答案。

【问题讨论】:

    标签: node.js firebase-authentication google-cloud-functions firebase-tools


    【解决方案1】:

    Firebase 模拟器套件目前为 Cloud Firestore、实时数据库、Cloud Functions 和 Cloud Pub/Sub。它尚未模拟 Firebase 身份验证 API。因此,您进行的任何身份验证调用都将针对与模拟器关联的真实项目执行。

    这也意味着您的functions.auth.user().onCreate((user) => { Cloud Function 目前不会在模拟器中触发。您必须将其部署到服务器以测试此触发器。

    要了解身份验证模拟器何时可用,我建议密切关注 Firebase 的 release notes,以及列出支持的产品的 main documentation page for the emulator suite。你也可以在 Github 上更密切地关注,无论是在提交中,还是在这个 feature request 中。

    【讨论】:

    • 所以这意味着它现在仍在进行中?我总是必须部署这些功能才能正确测试?我不想在函数中输入测试数据。
    • 您可以在另一个“dev” FB 项目上发布(您需要创建两个 FB 项目),也可以在命令行中简单地运行不带“auth”关键字的模拟器,运行所有模拟器使用NODE_ENV=development firebase emulators:start --inspect-functions
    【解决方案2】:

    正如@Franek van Puffelen 上面写的那样,它还没有完成。

    能够像下面这样在本地测试身份验证功能。

    function sendWelcomeEmail(user) {
      console.log(user.uid);
      console.log(user.email);
      console.log(user.displayName);
    }
    
    exports.sendWelcomeEmail = functions.auth.user().onCreate((user) => sendWelcomeEmail(user));
    

    【讨论】:

      【解决方案3】:

      firebase 最近发布了身份验证模拟器,您可以通过此处的发布说明查看它:https://firebase.google.com/support/releases#october_26_2020,并在此处进一步指导:https://firebase.google.com/docs/emulator-suite/connect_auth

      【讨论】:

        猜你喜欢
        • 2021-08-19
        • 1970-01-01
        • 2018-10-21
        • 2018-11-25
        • 2019-12-02
        • 2020-08-17
        • 2018-07-19
        • 2020-11-27
        相关资源
        最近更新 更多