铸造FirebaseId代币异常缓慢



对于经过身份验证的 API 调用,我每次都会生成一个 firebaseId 令牌,如下代码所示。但这有时需要长达 2-3 秒来铸造代币,这会增加缓慢的用户体验。是否有任何解决方法,也许可以将令牌存储更长时间甚至无限期?我错过了一些明显的东西吗?

谢谢!

async fetchFromAPIAuthenticatedTimeout(url, params) {
    this.fetchStampA = (new Date()).getTime()
    try {
        const token = await firebase.auth().currentUser.getIdToken(true)
        this.fetchStampB = (new Date()).getTime()
        const response = await fetch(url,params)
        if (response.status != 200) {
            throw Error("api-error");
        }
        var json = null;
        try {
            json = await response.json();
        } catch (error) {
            throw Error("api-error")
        }
        this.fetchStampD = (new Date()).getTime()
        console.log(">> token",this.fetchStampB-this.fetchStampA)
        console.log(">> fetch",this.fetchStampC-this.fetchStampB)
        return json.result
    }
    catch (error)
    {
        throw Error(error.message)
    }
}
// Prints:
// >> token 2198
// >> fetch 319

根据参考文档,getIdToken(( 如果令牌已过期,将自动刷新令牌。因此,无需对每个调用强制刷新。删除此选项将防止往返并大大加快请求速度,并且还可以使您摆脱配额麻烦 - 随着应用程序的扩展,您将遇到配额麻烦。

更新:此边缘情况已修复。令牌现在会在过期前刷新一小段时间。因此,对于此用例,永远不需要使用强制刷新。请注意,可能仍然存在一种边缘情况,即如果您在过期前几秒钟发送请求并且存在延迟,则服务器可能不会在过期发生之前调用 verifyIdToken((。因此,您可能需要实现重试逻辑或检查过期时间(请参阅 IdTokenResult#expirationTime(,并在非常接近时间戳时强制刷新。但肯定不是每个请求。

最新更新