fuctions.EventContext在更新到最新的Firebase(6.10.0)后尝试获取uid时给出错误
我有一个很好的测试项目。我更新了Firebase工具,打字稿并使用相同的代码创建了一个新项目。突然项目在EventContext.auth.uid上给出错误。当鼠标悬停上下文或身份验证时会说 对象可能是'undefined'。ts(2532)
export const onAccountTransferCreated = functions.database
.ref('/data_transfer/from_data/user_data/{transferPas}')
.onCreate(async(snapshot, context) => {
console.log(`Snapshot = ${snapshot.toJSON}`)
console.log(`Context = ${context.auth.uid}`)
admin.auth().getUser(context.auth.uid)
答案 0 :(得分:1)
context
是EventContext类型的对象。从API文档的auth property中可以看出,它可能为null或未定义:
此字段仅用于实时数据库触发器和 可调用函数。对于未经身份验证的用户,此字段为null。 对于Firebase管理员用户和不提供用户的事件类型 信息,该字段将不存在。
EventContext.auth的TypeScript定义是这样的:
export interface EventContext {
auth?: {
uid: string;
token: object;
};
}
注意?在auth
之后。这意味着该属性不必存在。
TypeScript(在严格模式下)警告您,如果缺少此属性,则在运行时可能会遇到问题。使用前必须先检查它:
export const onAccountTransferCreated = functions.database
.ref('/data_transfer/from_data/user_data/{transferPas}')
.onCreate(async(snapshot, context) => {
console.log(`Snapshot = ${snapshot.toJSON}`)
if (context.auth) {
console.log(`Context = ${context.auth.uid}`)
admin.auth().getUser(context.auth.uid)
}
})
或者,您可以打开TypeScript严格模式,我不建议这样做。最好进行检查以避免运行时崩溃。