Firebase 在本地测试身份验证云功能

Plu*_*lum 6 node.js firebase-tools firebase-authentication google-cloud-functions

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 };
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

let getUserInfo = functions.httpsCallable('getUserInfo');
getUserInfo({userIDs: data}).then(res => doSomething);
Run Code Online (Sandbox Code Playgroud)

并在本地运行云功能

firebase emulators:start
Run Code Online (Sandbox Code Playgroud)

但它说

functions[sendWelcomeEmail]: function ignored because the auth emulator does not exist or is not running.
Run Code Online (Sandbox Code Playgroud)

所以在客户端应用程序中,getUserInfo工作得很好,但不能触发onCreate.

但是我找不到任何关于auth emulator.

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

Fra*_*len 6

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

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

要了解身份验证模拟器何时可用,我建议您密切关注 Firebase 的发行说明以及列出受支持产品的模拟器套件主文档页面。您还可以在 Github 上更密切地关注提交,或在此功能请求中

  • 您可以在另一个“dev”FB项目上发布(您需要创建两个FB项目),也可以简单地运行模拟器,而无需在命令行中使用“auth”关键字,使用`NODE_ENV=development firebase emulators:start 运行所有模拟器--检查功能` (3认同)

Plu*_*lum 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));
Run Code Online (Sandbox Code Playgroud)