Я не думаю, что это спецификация Firebase c. Это может быть больше связано с ожиданием / обещанием, но я не могу понять это.
Написание функции Firebase, позволяющей авторизованному пользователю обновить другую учетную запись пользователя. Кажется простым Пожалуйста, обратите внимание на комментарии. Обратите внимание, что 1) старый телефонный номер не определен (как и ожидалось), 2) новый / переданный телефонный номер le git, 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."
)
})