Javascript 试图通过firebase函数设置自定义声明时发送未定义的JSON字符串
有人能看出我做错了什么吗?我正在使用firebase,我正在向我的云函数发送数据Javascript 试图通过firebase函数设置自定义声明时发送未定义的JSON字符串,javascript,firebase,firebase-authentication,google-cloud-functions,firebase-admin,Javascript,Firebase,Firebase Authentication,Google Cloud Functions,Firebase Admin,有人能看出我做错了什么吗?我正在使用firebase,我正在向我的云函数发送数据 window.addEventListener("load", function load(event) { firebase.auth().onAuthStateChanged(function (user) { if (user) { let user = firebase.auth().currentUser; let userInfo
window.addEventListener("load", function load(event) {
firebase.auth().onAuthStateChanged(function (user) {
if (user) {
let user = firebase.auth().currentUser;
let userInfo = db.collection("Users").doc(user.uid);
userInfo.get().then(function (doc) {
if (doc.exists) {
let userEmail = firebase.auth().currentUser.email
var xhttp = new XMLHttpRequest();
xhttp.open(
"POST",
"https://us-central1-******.cloudfunctions.net/addMRole",
true
);
xhttp.setRequestHeader("Content-Type", "application/json");
xhttp.send(
JSON.stringify({
email: userEmail,
uID: user.uid
})
);
console.log("should still be working HOPEFULLY HERE YOU ARE")
}
});
}
});
});
我正在把它发送到我的云函数
exports.addMRole = functions.https.onRequest((req, context) => {
let email = req.email;
let uiD = req.uID
console.log(email)
console.log(uiD)
return admin.auth().getUserByEmail(email).then(user => {
return admin.auth().setCustomUserClaims(uiD, {
member: true
});
}).then(() => {
return {
message: `success! ${req.email} is now a member!`
}
}).catch(err => {
console.log(err)
return err;
});
});
但是由于某些原因,它被作为未定义的发送到云函数。我想它不喜欢我把它寄给它的方式。看起来它对家不太满意,我从这里的第一个代码开始发送它
xhttp.send(
JSON.stringify({
email: userEmail,
uID: user.uid
})
);
和userEmail/user.uid控制台在发送前会记录良好,但在我登录此处时会在函数中记录
console.log(email)
console.log(uiD)
它在我的函数日志中显示为未定义发送。我基本上是在向我的云功能发送用户电子邮件和UID,我想将他们的自定义声明更改为会员。这很奇怪,因为我让它工作,然后我做了一些事情,现在不知道如何让它再次工作,不知道我在这件事上搞砸了。哈哈。谢谢你的帮助这是不对的:
let email = req.email
let uiD = req.uID
这些都是未定义的,就像你现在写的那样。如果要访问发布到HTTP函数的JSON对象的属性,应按如下方式操作,如图所示:
除此之外,您的函数也不会向调用者发送响应。按照现在的结构,它可能会完成它的工作,但它总是在默认的60秒后超时。从
回调返回响应的方式将不起作用。似乎您可能将HTTP类型触发器与可调用类型触发器混合在一起,它们有非常不同的发送响应的方式。由于您正在编写HTTP类型触发器,因此应按照发送响应的说明进行操作。如果您有新问题,请单独发布,并解释哪些问题无法按预期方式工作。堆栈溢出并不意味着在同一代码位上对一系列新问题进行反复迭代
let email = req.body.email
let uiD = req.body.uID