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

构建自定义认证流:Cloud Functions触发函数获取JWT附加声明

关于自定义认证流与Firebase触发器的疑问解答

我来帮你拆解这些问题,结合Firebase Auth和触发器的实际工作机制逐一解答:

1. 能否在触发函数中获取相同的认证信息?

不行,至少默认情况下做不到。当你用自定义token调用signInWithCustomToken登录时,Firebase Auth只会验证token的签名和有效性,但不会自动将自定义token中的附加声明同步到用户的Firebase Auth记录里。而Firestore(或其他服务)的触发器中,auth对象里的claims仅来自Firebase Auth存储的customClaims(也就是你通过setCustomUserClaims设置的内容)。如果没调用这个方法,触发器里拿不到初始JWT中的附加声明。

2. 是否有计划或方法在服务器端通过getUser获取认证信息?

用Firebase Admin SDK的getUser方法只能获取到用户在Firebase Auth中持久化存储的customClaims,也就是你主动通过setCustomUserClaims设置的内容。初始自定义token里的附加声明不会自动被Firebase Auth保存,所以getUser拿不到这些信息。目前Firebase没有公开计划要让getUser自动读取初始自定义token中的附加声明——毕竟自定义token是你自己生成的,Firebase Auth只做验证,不负责存储额外的自定义数据。

3. 能否在触发函数(而非HTTPS或可调用函数)中从服务器获取IDToken?

不行。像Firestore触发器、Auth onCreate触发器这类事件驱动的函数,它们的上下文里没有提供用户完整的ID token字符串。Auth的onCreate触发器能拿到用户的uid和基础信息,但拿不到登录时的ID token;Firestore触发器的auth对象包含用户的uid、email等信息,但同样没有完整的ID token。如果必须要获取的话,只能让客户端在登录后把ID token写入Firestore文档,再让触发器读取,但这属于客户端传递,不是服务器端直接获取,还得注意安全校验。

4. 是否有计划支持使用自定义token创建认证用户时的onCreate触发器?

其实Auth的onCreate触发器本来就会在用户第一次用自定义token登录时触发(因为这时候会创建新的Firebase Auth用户),但问题是这个触发器里的user对象同样不包含初始自定义token中的附加声明。目前Firebase没有公开计划要让这个触发器直接获取自定义token里的附加声明。不过你可以换个思路:在生成自定义token的服务器端,把需要的附加声明同时写入一个临时存储(比如Firestore的临时集合或Realtime Database),然后在Auth的onCreate触发器里,根据uid读取这个临时数据,再完成Firestore的集合/文档填充。这样就能跳过客户端调用setCustomUserClaims的步骤了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:34:31