如何从云功能访问Firebase自定义声明

时间:2020-05-04 23:13:55

标签: typescript firebase firebase-authentication google-cloud-functions firebase-admin

编辑: 我可以按照以下方式进行操作,但我希望有一个更好的解决方案:

console.log((operatorUser.customClaims as any)['admin']);
console.log((operatorUser.customClaims as any).admin);

我正在尝试在可调用的云功能中检查用户的自定义声明。

我从这里开始跟踪示例: https://firebase.google.com/docs/auth/admin/custom-claims#set_and_validate_custom_user_claims_via_the_admin_sdk

尝试访问自定义声明时出现以下错误:

“元素隐式具有'any'类型,因为类型'” admin“'的表达式不能用于索引类型'Object'。 类型“对象”上不存在属性“ admin””

 const operatorUser = await admin.auth().getUser(operatorUserDoc.id);
 console.log(operatorUser.customClaims['admin']);

2 个答案:

答案 0 :(得分:1)

{p {1}}的

类型签名最近得到了改进。如果您使用的是最新版本的SDK,则应该只需执行customClaims即可访问声明。

有关更多上下文,请参见https://github.com/firebase/firebase-admin-node/issues/864

答案 1 :(得分:0)

谢谢。这帮助我解决了另一个相关问题。

仅供参考,另一种在 firebase“实时数据库”云函数中访问调用用户声明的方法是直接从 context.auth:

const isAdmin = (context?.auth?.token as any)?.admin;
  • 但与 customClaims 的更新不同,token 属性仍然需要转换。另外,请记住 context.auth 仅在 Firebase 实时数据库上设置,在 Firestore 数据库函数上未定义。