Firebase V2云函数中UserRecord对应的类型接口是什么?
问题解答
核心结论
functionsHttps.CallableRequest['auth'] 不等价于 V1中的UserRecord。
两者的区别
- V1的
UserRecord是Firebase Auth存储的完整用户全量记录,包含邮箱、创建时间、自定义声明等所有用户相关字段。 CallableRequest['auth']是Callable函数请求上下文里的认证元数据,类型为CallableAuth,仅携带uid、token(含自定义声明)等请求时的认证信息,并非完整的用户记录。
V2中获取UserRecord类型的方法
Firebase Functions V2不再从firebase-functions包导出UserRecord,需直接从Firebase Admin SDK导入:
import { UserRecord } from 'firebase-admin/auth';
如果业务需要完整用户记录,不能直接使用request.auth,需通过Admin SDK主动查询:
import * as functionsHttps from 'firebase-functions/v2/https'; import * as admin from 'firebase-admin'; admin.initializeApp(); // 推荐直接使用CallableRequest类型,无需自定义Request接口 export const createUserV2 = functionsHttps.onCall(async (request: functionsHttps.CallableRequest<CreateUserData>) => { const uid = request.auth?.uid; if (!uid) { throw new functionsHttps.HttpsError('unauthenticated', '用户未认证'); } // 获取完整的UserRecord const userRecord: UserRecord = await admin.auth().getUser(uid); const customClaims = userRecord.customClaims; const { userType, privacySettings } = request.data; // 后续业务逻辑 })
自定义Request接口的修正(若需保留)
如果坚持使用自定义Request接口,应将auth的类型指定为正确的CallableAuth:
import * as functionsHttps from 'firebase-functions/v2/https'; interface Request { data: CreateUserData; auth?: functionsHttps.CallableAuth; // 替换any为标准类型 }
内容的提问来源于stack exchange,提问作者Richardson
相关产品推荐
相关产品推荐

