使用accounts.signInWithPassword时偶现TOKEN_EXPIRED错误的解决方法
解决Firebase Auth调用
signInWithPassword时的TOKEN_EXPIRED错误 错误原因解释
这个错误不是要求你提供idToken,而是Firebase Auth客户端SDK本地缓存的**刷新令牌(refresh token)**过期了。即使当前未登录,SDK如果之前缓存了过期的刷新令牌,调用登录接口时会自动尝试用它去刷新会话,从而触发TOKEN_EXPIRED错误。
解决方法
- 登录前重置Auth状态:调用
signInWithPassword之前,先执行signOut()清空本地缓存的过期令牌,再发起登录请求。示例代码:firebase.auth().signOut() .then(() => { return firebase.auth().signInWithEmailAndPassword(email, password); }) .catch(err => { // 处理其他登录错误 }); - 调整持久化策略:如果不需要保留登录状态的持久化,将Auth的持久化设置为
NONE,避免本地缓存过期令牌。代码:firebase.auth().setPersistence(firebase.auth.Auth.Persistence.NONE); - 捕获错误后强制清除缓存并重试:在登录的错误捕获逻辑中,判断错误码为
TOKEN_EXPIRED时,直接清除本地缓存(比如执行signOut()),然后立刻重试登录,不需要等待几分钟。 - 存档排除Auth缓存数据:确保你的自动存档逻辑只存储业务数据,不要包含Firebase Auth的本地缓存内容,避免加载存档时恢复过期令牌。
关于等待时间的问题
不需要等待几分钟,只要清除本地的过期缓存,就能立即重新发起登录请求。
内容的提问来源于stack exchange,提问作者IanMayto
相关产品推荐
相关产品推荐

