如何在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
相关产品推荐
相关产品推荐

