【发布时间】:2020-07-27 23:03:59
【问题描述】:
我认为这不是 Firebase 特有的。它可能与等待/承诺有更多关系,但我无法弄清楚。
编写 Firebase 函数以允许授权用户更新另一个用户帐户。看起来很简单。请注意 cmets。请注意,1)旧电话号码未定义(如预期),2)新/传入的电话号码是合法的,3)分配后,“新”密码仍然未定义。为什么?!?!?
我错过了什么??? (对不起,我不能让这个问题更简洁!)
module.exports = functions.https.onCall(async (data, context) => {
var targetUser = await admin.auth().getUser(data.targetUser.uid)
// Following rule might not make sense! But it works. We know cuz the following later logs output correctly!
if (
Boolean(targetUser) && Boolean(context.auth) &&
Boolean(context.auth.token.companyToken) &&
(Boolean(context.auth.token.isAdmin) || context.auth.email === targetUser.email)
) {
// Log output appears from the following!
console.log(`Phone was ${targetUser.phoneNumber}`) // "Phone was undefined" - expected!
console.log(`Passed-in Phone is ${data.targetUser.phoneNumber}`) // "Phone is (402)555-1212" - Yep!
// Again, ignore the logic here. It's working! I get the embedded log output
if (context.auth.email === targetUser.email || context.auth.token.companyToken === targetUser.customClaims.companyToken) {
// the following appears to not execute! I expect targetUser.phoneNumber to be updated!
// ... it SHOULD become data.targetUser.phoneNumber (i.e. "(402)555-1212")
targetUser.phoneNumber = (data.targetUser.phoneNumber ? data.targetUser.phoneNumber : targetUser.phoneNumber)
console.log(`Phone NOW ${targetUser.phoneNumber}`) // "Phone is NOW undefined"
// WTF?!?!? It's still undefined?!?!?
// THIS IS MY PROBLEM RIGHT HERE! WHY IS phoneNumber STILL UNDEFINED?!?!?!
// You can ignore the rest...
return updateUser(targetUser).then(() => {
return {
success: true
}
})
.catch((e) => {
return {
// yadda yadda
}
})
}
}
throw new functions.https.HttpsError(
"not-authorized",
"Requestor is not authorized to perform this operation on the target user."
)
})
【问题讨论】:
标签: javascript firebase promise async-await google-cloud-functions