Firebase onCall云功能请求返回“ INVALID_ARGUMENT”

时间:2020-08-11 21:15:02

标签: javascript node.js firebase google-cloud-functions

尝试访问我的云功能时出错:

{“错误”:{“消息”:“错误请求”,“状态”:“ INVALID_ARGUMENT”}}

如果调用了客户端触发器,但是请求有误 格式,例如不是JSON,字段无效或缺少 数据字段,该请求将被拒绝400错误请求,并带有 错误代码为INVALID_ARGUMENT。

Firebase文档:Firebase Error Documentation

index.js 在函数目录中

const functions = require('firebase-functions');

var admin = require("firebase-admin");
var serviceAccount = require("./fir-email-b4c1f-firebase-adminsdk-xj7ug-d01651ffc9");


admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "https://fir-email-b4c1f.firebaseio.com"
});



    exports.getUserByEmail = functions.https.onCall((data, context) => {

const email = data.email;

return admin.auth().getUserByEmail(email)
    .then(userRecord => {
    console.log('Successfully fetched user data:', userRecord.toJSON());
    const userData = userRecord.toJSON();
    return { userData: userData };
})

});

项目主目录中的

authentication.js 调用函数

    function retrieveUserData() {

    var emailString = "test@gmail.com";
    var userEmail = firebase.functions().httpsCallable('getUserByEmail');

    userEmail({email: emailString}).then(function(result) {
        // Read result of the Cloud Function.
        var emailResult = result.data.text;
        console.log('Successfully fetched user data:', emailResult.toJSON());


    })

}

不完全了解该错误。我假设我缺少基于文档的论点。有人可以指引我正确的方向。

1 个答案:

答案 0 :(得分:1)

是的,看来您确实缺少争论。 wprintf()函数的第一个参数(printf())应该是包含以下属性的对象:data,此行:getUserByEmail()。但是,在调用它时,您传入的对象仅具有email属性。这意味着,当您的云功能运行时,data.email是未定义的。

可能是您要这样调用函数:

const from = data.sender;

更新:关于第二个问题: 您的云函数返回的对象只有一个单独的属性:text,因此,如果要在输出中记录返回的值,则需要替换

userEmail({email: emailString}).then(function(result) {
        // Read result of the Cloud Function.
}

与此:

userData

所有额外字段:var emailResult = result.data.text; console.log('Successfully fetched user data:', emailResult.toJSON()); 在返回的对象上不存在。并且您已经在您的云函数中将Firebase响应转换为JSON。您不能在客户端上再次这样做