You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Firestore第二代触发器中获取触发变更的认证用户?

问题:如何确定在Firestore第二代触发器中发起变更的认证用户?

第一代的onUpdate触发器提供change对象和context对象,可通过context获取认证信息;而对应的第二代onDocumentUpdated仅提供event对象,该对象中似乎不包含认证用户信息。

第一代示例代码

export const onUserUpdate = Firestore
    .document("users/{userId}")
    .onUpdate(async (change, context) => {
        const before = change.data.before.data();
        const after = change.data.after.data();

        // 访问认证用户信息
        const user = context.auth;

        if (user) {
            console.log("认证用户ID:", user.uid);
            console.log("认证用户邮箱:", user.token.email);
            console.log("认证用户名称:", user.token.name);
            // 可按需访问更多用户属性
        } else {
            console.log("无可用的认证用户信息。");
        }
});

第二代示例代码(未完成)

exports.onUserUpdate = onDocumentUpdated("user/{userId}", async (event) => {
    const before = event.data.before.data();
    const after = event.data.after.data();

    // 如何获取认证信息?

    
});
event: FirestoreEvent<Change<QueryDocumentSnapshot>>

解决方案

在Firestore第二代触发器中,认证用户信息可直接通过event.auth属性获取,其结构与第一代context.auth完全一致:

exports.onUserUpdate = onDocumentUpdated("user/{userId}", async (event) => {
    const before = event.data.before.data();
    const after = event.data.after.data();

    // 访问认证用户信息
    const user = event.auth;

    if (user) {
        console.log("认证用户ID:", user.uid);
        console.log("认证用户邮箱:", user.token.email);
        console.log("认证用户名称:", user.token.name);
        // 可按需访问更多用户属性
    } else {
        console.log("无可用的认证用户信息。");
    }
});

需要注意:

  • 只有当变更由已认证用户通过Firebase客户端SDK发起时,event.auth才会包含用户信息;
  • 如果变更由管理员、云函数或其他服务端操作发起,event.auth会为null;
  • event.auth.token包含用户的ID令牌信息,其中的字段取决于用户的认证方式和自定义声明。

内容的提问来源于stack exchange,提问作者ctown4life

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:15:15