如何解决Firebase onCall云功能请求返回“ INVALID_ARGUMENT”
尝试访问我的云功能时出错:
{“错误”:{“消息”:“错误请求”,“状态”:“ 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());
})
}
不完全了解该错误。我假设我缺少基于文档的论点。有人可以指引我正确的方向。
解决方法
是的,看来您确实缺少争论。 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。您不能在客户端上再次这样做
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。