当第一次与服务器成功认证时,我们将有 {access_token, expires_in, refresh_token}。我们将 access_token 和 expires_in 存储在会话存储中,而 refresh_token 存储在本地存储中。
每当获取 access_token 以获取数据(您应该通过填充 access_token 来增强/包装 fetch),您将检查 expires_in 是否即将到期(不到 1 分钟,或者您觉得合适),然后我们使用 refresh_token 请求新访问令牌。当然,我们还必须将新结果更新到存储中。
伪代码:
function getToken() {
const expiresIn = storage.getItem(KEY_EXPIRES_IN);
const accessToken = storage.getItem(KEY_ACCESS_TOKEN);
if (accessToken
&& (!expiresIn || moment.unix(Number(expiresIn)).diff(moment(), 'minute') > 1)) {
return accessToken;
}
return refreshToken();
}
每次向服务器发出请求时,都会调用上述函数。
P/S:您可能希望将其作为与 isomorphic-fetch 一起使用的承诺