如何获取Firebase用户指定UID对应的所有custom token?
Firebase自定义token查询方案
Firebase官方没有提供直接查询指定UID对应所有已生成custom token的接口,因为Firebase服务端本身不会持久化存储你通过Admin SDK生成的自定义token。
custom token本质是带签名的JWT短期凭证,生成后直接返回给调用方,Firebase Auth仅会在客户端使用该token兑换正式ID token时校验其签名和有效性,不会留存所有生成过的token记录。
如果你需要实现该查询能力,需要自行在生成token时做存储落地,参考实现代码如下:
生成token时同步存储
const admin = require('firebase-admin'); // 示例用Firestore存储,你也可以替换为自己的业务数据库 const db = admin.firestore(); const claims = {}; const UID = ""; admin.auth() .createCustomToken(UID, claims) .then(async (customToken) => { // 存储生成的token,关联对应UID await db.collection('custom_token_records').add({ uid: UID, token_value: customToken, create_time: admin.firestore.FieldValue.serverTimestamp(), // custom token默认有效期为1小时,记录过期时间方便后续清理 expire_time: Date.now() + 3600 * 1000 }) });
查询指定UID的所有token
async function listAllCustomTokensByUid(uid) { const tokenSnapshot = await admin.firestore() .collection('custom_token_records') .where('uid', '==', uid) .orderBy('create_time', 'desc') .get(); return tokenSnapshot.docs.map(doc => doc.data()); }
注意:custom token默认有效期仅1小时,过期后即使保留记录也无法正常使用,建议定期清理过期记录节约存储资源。如果你是需要作废某个用户的所有有效登录凭证,不需要查询custom token,直接调用
admin.auth().revokeRefreshTokens(uid)即可让该用户所有已签发的refresh token、以及用custom token兑换得到的ID token全部失效。
内容的提问来源于stack exchange,提问作者Tuan Nguyen
相关产品推荐
相关产品推荐

