更新后Firebase Functions.EventContext变得不确定

时间:2019-05-30 06:59:18

标签: typescript firebase firebase-realtime-database google-cloud-functions

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)

1 个答案:

答案 0 :(得分:1)

contextEventContext类型的对象。从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严格模式,我不建议这样做。最好进行检查以避免运行时崩溃。