铸造firebaseId代币的速度异常缓慢

铸造firebaseId代币的速度异常缓慢,firebase,react-native,firebase-authentication,Firebase,React Native,Firebase Authentication,对于经过身份验证的API调用,我每次都生成一个firebaseId令牌,如下代码所示。但这有时需要2-3秒的时间来造币,这意味着用户体验的速度很慢。是否有解决办法,可能是将令牌存储更长的时间,甚至无限期?我错过了什么明显的东西吗 谢谢 async fetchFromAPIAuthenticatedTimeout(url, params) { this.fetchStampA = (new Date()).getTime() try { const token =

对于经过身份验证的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()。因此,您可能希望实现重试逻辑或检查过期时间(请参阅),如果非常接近时间戳,则强制刷新。但肯定不是在每个请求上。

您通过将
true
传递到
getIdToken()
来强制令牌刷新。如果您没有强制往返到服务器并使用本地令牌,速度可能会快得多。谢谢。这是有道理的,尽管我可以问一下,如果布尔值已经包含了必要时刷新自身的逻辑,那么为什么它首先会存在?我想我很困惑,因为文档中的示例将标志设置为true:有两个复杂的用例,这很有用,它最初是为了处理我在这里描述的边缘用例而添加的。请注意,它不再是必要的,因为在最近的一次增强中删除了边缘情况。