对于经过身份验证的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
答案 0 :(得分:0)
对于reference doc,getIdToken()将在令牌过期后自动刷新。因此,无需在每个呼叫上强制刷新。删除此选项将防止往返并显着加快请求的速度,并使您摆脱配额问题-在应用扩展时会遇到该问题。
更新:此极端情况是固定的。现在,令牌会在过期之前刷新一小段时间。因此,在此用例中无需使用强制刷新。。请注意,在某些情况下,如果您在到期前几秒钟发送请求并且存在延迟,则服务器可能不会调用verifyIdToken ()到期之前。因此,您可能想要实现重试逻辑或检查到期时间(请参阅IdTokenResult#expirationTime),如果它非常接近时间戳,则强制刷新。但是肯定不是在每个请求上。