Firebase测试身份验证云在本地运行

时间:2020-07-05 01:49:37

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

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 };
});

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

因此,在我的客户端应用中,我运行

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.

因此,在客户端应用中,getUserInfo运作良好,但无法触发onCreate

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

赞赏任何链接/文章/视频或答案。

3 个答案:

答案 0 :(得分:6)

Firebase仿真器套件当前可将Firestore,实时数据库,云功能和云发布/订阅云化。它尚未模拟Firebase身份验证API。因此,您所做的任何身份验证调用都将针对与模拟器关联的真实项目执行。

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

要了解何时可以使用身份验证模拟器,我建议您留意Firebase的release notes和列出支持产品的main documentation page for the emulator suite。您也可以在提交或本feature request中更紧密地关注Github。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

因此,正如@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));