【问题标题】:Firebase Functions.EventContext becomes undefined after updateFirebase Functions.EventContext 在更新后变得未定义
【发布时间】:2019-10-15 19:33:18
【问题描述】:

更新到最新的 firebase (6.10.0) 后尝试获取 uid 时,fuctions.EventContext 出错

我有一个测试项目运行良好。我更新了 firebase 工具、打字稿并使用相同的代码创建了一个新项目。突然,该项目在 EventContext.auth.uid 上出现错误。当鼠标悬停上下文或身份验证时,它说 对象可能是“未定义”.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)

【问题讨论】:

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


    【解决方案1】:

    context 是一个EventContext 类型的对象。正如您从其auth property 的 API 文档中看到的那样,它可能为 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 严格模式,我不推荐这种模式。最好进行检查以避免在运行时崩溃。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-21
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 2021-10-09
      • 2017-08-13
      相关资源
      最近更新 更多