javascript - 无法从我的 firebase 可调用函数中提取参数

标签 javascript firebase google-cloud-platform firebase-authentication google-cloud-functions

记录表单数据,即电子邮件、密码和 Angular 色,显示正确的数据正在传递给函数

App.js 文件

 const createUserWithRole = httpsCallable(functions, "createUserAndAddUserRole"); 
 console.log(form) // WORKS
 const response = await createUserWithRole({
    email: form.email,
    password: form.password,
    role: form.role,
   });

Functions.js

    const admin = require("firebase-admin");

    // const cors = require("cors")({origin: true}); // Add cors middleware
    const {onCall} = require("firebase-functions/v2/https");
    const logger = require("firebase-functions/logger");
    
    admin.initializeApp();
    exports.createUserAndAddUserRole = onCall(async (data, context) => {
      
      // logger 1
      logger.log("data", data);
    
      
      // const email = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0163736866697541666c60686d2f626e6c" rel="noreferrer noopener nofollow">[email protected]</a>";
      // const password = "bright";
      // const role = "admin";
    
      const userRecord = await admin
          .auth()
          .createUser({
            email,
            password,
          });
      logger.log("User Record", userRecord);
      return admin.auth().getUserByEmail(data.email).then((user)=> {
        return admin.auth().setCustomUserClaims(user.uid, {
          role: role,
        });
      }).then(() => {
        console.log("Claims Set");
        const userDataAfter = admin.getUserByEmail(data.email);
        return {
          status: 200,
          message: `Success! ${data.email} has been made ${data.role} role`,
        };
      }).catch((err) => {
        return {
          status: 500,
          message: err,
        };
      });
    });

运行记录器 1 打印出一个对象,该对象似乎是一个请求对象,其中我传递的数据位于子对象jsonPayload.data

onCall 的文档指出,仅使用 data.email 即可,但事实并非如此。

我传递的数据错误吗?如何传递数据或从 jsonPayload.data 对象中提取数据?

最佳答案

您使用 Cloud Functions 2n gen(参见 const {onCall} = require("firebase-functions/v2/https");)。正如您在 Callable Cloud Functions 2nd generation 的文档中看到的那样传递给回调函数的参数已更改为

onCall((data, context) => {...});(第一代)

onCall((request) => {...});(第二代)

因此您需要执行以下操作:

exports.createUserAndAddUserRole = onCall(async (request) => {
      
   const email = request.data.email;
   const password = request.data.password;
   const role = request.data.role;

   // ...

关于javascript - 无法从我的 firebase 可调用函数中提取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76580471/

相关文章:

javascript - 为什么 jasmine 不运行我的任何规范?

javascript - 在 AngularJS 中隐藏验证

node.js - 使用 jsonwebtoken 时验证 firebase 自定义 token 以获取 token ID 失败

javascript - 创建 promise 回调

node.js - 将 Ghost 与 Google Cloud SQL 结合使用时出现问题

javascript - 引用错误: JQuery is not defined on richfaces

android - 如何根据时间(顺序)保存或检索数据

google-cloud-platform - 如何设置我的谷歌云功能的端点路径(使用无服务器框架)

reactjs - 将 create-react-app build 部署到 Google Cloud Platform 后找不到 URL

javascript - 验证如何运作