【问题标题】:Firebase Cloud Functions Call : error : Object message : "Bad Request" status : "INVALID_ARGUMENT"Firebase 云函数调用:错误:对象消息:“错误请求”状态:“INVALID_ARGUMENT”
【发布时间】:2019-06-27 13:06:20
【问题描述】:

首先我正在使用 react-native

我想在我的项目中使用自定义声明,因为它似乎符合我希望在我的应用中使用的角色分配。

按照文档设置我的应用程序后,我成功创建了一些功能

但是,事情是这样的,当我尝试通过获取端点来调用函数时,我总是得到这个错误:

在控制台中

错误 : 目的 信息 : “错误的请求” 状态 : “INVALID_ARGUMENT”

在 Firebase 控制台中

   addAdminRoleTest    Request body is missing data. { email: 'dev@test.com' }

我找不到任何答案,除了我从我的获取中发送了错误的信息,但我不明白为什么。

我什至试图简化我的功能只是为了获取我发送的数据,但我遇到了完全相同的错误

在下面找到我的云函数和调用方法:

functions/index.js

exports.addAdminRole = functions.https.onCall((data, context) => {
    // get user
    return admin.auth().getUserByEmail(data.email).then(user => {
        // if not already (admin)
        if(user.customClaims && (user.customClaims).admin === true) {
            return;
        }
        // add custom claim (admin)
        return admin.auth().setCustomUserClaims(user.uid, {
            admin: true
        });
    }).then(() => {
        return {
            message: `Bravo : ${data.email} fait partie de l'équipe Admins`
        }
    }).catch(err => {
        return err;
    });
});

简化功能:

exports.addAdminRoleTest = functions.https.onCall(data => {
    console.log("parse data : "+JSON.parse(data));
    return (
        JSON.parse(data)
    );
});

adminScreen.js

function httpAddAdminRole() {

    const initRequest = {
        method: 'POST',
        headers: {
            Accept: 'application/json',
            'Content-Type': 'application/json'
        },
        body:JSON.stringify({
            email: 'dev@test.com'
        })
    }

    console.log(initRequest);

    return fetch('https://us-central1-my-project.cloudfunctions.net/addAdminRole', initRequest)
      .catch(err => console.log(err))
      .then(res => res.json())
      .then(parsedRes => {
          console.log(parsedRes);
      });
}

【问题讨论】:

    标签: react-native google-cloud-functions


    【解决方案1】:

    最后这主要是想念我的json知识

    我的body应该包含data

    这是我的答案:

    functions/index.js

    exports.addAdminRole = functions.https.onCall((data, context) => {
        const dataParsed = JSON.parse(data);
    
        // get user
        return admin.auth().getUserByEmail(dataParsed.email).then(user => {
            // if not already (admin)
            if(user.customClaims && (user.customClaims).admin === true) {
                console.log(dataParsed.email + " is already an Admin");
                return;
            }
            // add custom claim (admin)
            return admin.auth().setCustomUserClaims(user.uid, {
                admin: true
            });
        }).then(() => {
            return {
                message: `Bravo : ${dataParsed.email} is now an Admin`
            }
        }).catch(err => {
            return err;
        });
    });
    

    adminScreen.js

    function httpAddAdminRole(mail) {
    
        const initRequest = {
            method: 'POST',
            headers: {
                Accept: 'application/json',
                'Content-Type': 'application/json'
            },
            body:JSON.stringify({ 
                data:JSON.stringify({
                    email: mail
                })
            })
        }
    
        console.log(initRequest);
    
        return fetch('https://us-central1-my-project.cloudfunctions.net/addAdminRole', initRequest)
          .catch(err => console.log(err))
          .then(res => res.json())
          .then(parsedRes => {
              console.log(parsedRes);
          });
    }
    

    【讨论】:

      猜你喜欢
      • 2020-09-17
      • 2013-07-21
      • 2018-03-30
      • 2020-12-01
      • 2020-11-29
      • 2015-06-12
      • 2018-11-25
      • 2016-11-02
      • 2019-11-21
      相关资源
      最近更新 更多