Firebase Cloud Functions 1.0如何获取当前用户信息?
在Firebase Cloud Functions 1.0中获取当前用户信息的方法
嘿,我刚好踩过这个版本升级的坑,原来那种非官方的event.auth.variable.uid确实在1.0里被移除了,不过新版的context参数已经提供了官方标准化的用户信息获取方式,不同类型的函数获取逻辑略有不同,我给你分场景说清楚:
1. 实时数据库/Cloud Firestore触发器函数
如果你的函数是由用户的数据库操作(比如写入、更新)触发的,且用户已通过Firebase认证,context.auth对象就会包含用户的核心认证信息:
exports.updateUserProfile = functions.firestore.document('users/{userId}').onUpdate((change, context) => { // 获取当前操作的用户UID const currentUserId = context.auth?.uid; if (!currentUserId) { // 处理用户未认证的情况,比如直接返回终止函数 return null; } // 还能获取用户令牌里的附加信息,比如邮箱、自定义声明等 const userEmail = context.auth?.token.email; const isAdmin = context.auth?.token.admin === true; // 你的业务逻辑... });
这里用可选链操作符?.避免context.auth为null时的报错,也可以先通过if (context.auth)判断再取值。
2. HTTP函数
HTTP函数是公开可访问的,需要你手动从请求头里提取并验证用户的ID Token,才能安全获取用户信息:
const admin = require('firebase-admin'); admin.initializeApp(); exports.getPrivateData = functions.https.onRequest(async (req, res) => { // 从Authorization头里提取ID Token(格式为 Bearer <token>) const idToken = req.headers.authorization?.split('Bearer ')[1]; if (!idToken) { return res.status(401).send('请先完成登录'); } try { // 用Firebase Admin SDK验证并解析Token const decodedToken = await admin.auth().verifyIdToken(idToken); const userId = decodedToken.uid; const userEmail = decodedToken.email; // 后续返回用户专属数据... res.status(200).send(`欢迎回来,${userEmail}(UID:${userId})`); } catch (error) { res.status(401).send('无效的登录凭证'); } });
3. Auth触发器函数
如果是处理用户创建、删除等Auth相关的触发器,函数参数里直接就有user对象,包含完整的用户认证详情:
exports.welcomeNewUser = functions.auth.user().onCreate((user, context) => { const userId = user.uid; const userEmail = user.email; const displayName = user.displayName; // 比如给新用户发送欢迎邮件、初始化用户数据库条目... });
总的来说,新版SDK把用户信息的获取方式标准化了,不再依赖非官方字段,按照函数类型用对应的方式就能轻松拿到用户信息啦。
内容的提问来源于stack exchange,提问作者Abhishek Bansal
相关产品推荐
相关产品推荐

