Firebase无登录公开应用:唯一标识存数据及Token获取问题
关于Firebase匿名用户标识与Token获取的问题解答
先直接回应你的两个疑问:
1)Token是否是实现该需求的合适方式?
结合你「无需登录、公开可访问,用唯一键关联用户数据」的场景,更推荐用匿名用户的uid作为关联数据的唯一键,而非Token。原因如下:
- Token的核心定位是身份验证凭证,默认有效期仅1小时,会自动刷新,并不适合作为持久化的用户标识;
- 匿名登录对用户完全无感知(不需要输入任何信息),登录后得到的
uid是持久稳定的——只要用户不清除应用缓存、卸载应用,这个uid会一直绑定该用户,完美适配你「关联用户唯一数据」的需求。
如果你的场景中需要同时通过Token验证请求合法性,那Token可以配合使用,但单独作为存储数据的唯一键,uid是更优选择。
2)若是,如何获取字符串格式的新Token?
你遇到的问题是因为signInAnonymously()和getIdToken()都是异步Promise方法,不能同步直接获取结果。需要通过async/await或者.then()链式调用的方式处理:
方式一:使用async/await(代码更简洁易读)
async function getAnonymousToken() { try { // 先完成匿名登录,拿到用户凭证对象 const userCredential = await firebase.auth().signInAnonymously(); const user = userCredential.user; // 传入true表示强制获取新的Token,返回结果就是字符串格式 const token = await user.getIdToken(true); console.log(token); // 此处输出的就是你需要的字符串Token return token; } catch (error) { // 处理登录或Token获取失败的异常 console.error("操作失败:", error); } } // 调用函数执行逻辑 getAnonymousToken();
方式二:使用.then()链式调用
firebase.auth().signInAnonymously() .then(userCredential => { // 从登录凭证中取出用户对象 const user = userCredential.user; return user.getIdToken(true); }) .then(token => { console.log(token); // 字符串格式的Token }) .catch(error => { console.error("操作失败:", error); });
你的原代码没有处理异步逻辑,导致user实际上是一个未完成的Promise对象,而非真实的用户实例,自然无法正确获取Token字符串。
内容的提问来源于stack exchange,提问作者mrtnmgs
相关产品推荐
相关产品推荐

