用户通过邮箱登录Firebase后,如何获取并保留匿名与邮箱访问令牌?
解决方案:同时保留匿名与邮箱用户并获取双令牌
提前获取并实时刷新匿名令牌
在触发邮箱登录流程前,先拿到当前匿名用户的ID令牌,同时通过Firebase的令牌监听事件,确保缓存的匿名令牌始终是最新的:let anonymousToken; const anonymousUser = firebase.auth().currentUser; if (anonymousUser && anonymousUser.isAnonymous) { // 强制刷新获取最新匿名令牌 anonymousToken = await anonymousUser.getIdToken(true); // 监听令牌变化,实时更新缓存 firebase.auth().onIdTokenChanged(user => { if (user && user.isAnonymous) { user.getIdToken(true).then(token => { anonymousToken = token; }); } }); }关联匿名用户与邮箱用户(核心操作)
使用Firebase的linkWithCredential方法,把匿名账号和邮箱登录凭据合并,合并前已缓存的匿名令牌依然有效,同时可以获取合并后的邮箱用户令牌:// 从Firebase UI登录流程中获取邮箱凭据 const credential = firebase.auth.EmailAuthProvider.credential(userEmail, userPassword); const currentUser = firebase.auth().currentUser; if (currentUser && currentUser.isAnonymous) { // 执行账号关联 await currentUser.linkWithCredential(credential); // 获取合并后的邮箱用户令牌 const emailToken = await firebase.auth().currentUser.getIdToken(true); // 此时可同时将anonymousToken和emailToken发送至后端 }解决令牌过期问题
不要持久化存储令牌,而是依赖onIdTokenChanged监听事件,每次令牌自动刷新时更新缓存的匿名/邮箱令牌。这样每次需要调用后端接口时,都能直接拿到有效令牌,完全规避过期风险。
内容的提问来源于stack exchange,提问作者user2741831
相关产品推荐
相关产品推荐

