在阅读了多个JWT刷新令牌教程之后,我仍然不清楚API调用流程应该如何工作。
这是我的理解:
1)客户端拥有访问令牌和刷新令牌。它将访问令牌提交到api/getCustomerData
。
2)假设访问令牌已过期。服务器以401
响应。
3)客户端使用对401
的刷新令牌来响应api/token
请求。
4)由于刷新令牌仍然有效,因此服务器以新的访问令牌进行响应。
5)然后,客户端使用新的访问令牌向api/getCustomerData
发出新请求。
我的印象是,这是过多的API调用,但是我没有看到任何教程可以阐明更有效地执行此操作的方法。从目前的情况来看,如果我遵循此模式,则每个API请求都将如下所示:
const getCustomers = async () => {
const config = {
data: body,
withCredentials: true,
method: 'POST' as 'POST',
}
await axios(address + '/api/getCustomerData', config)
.then((response) => {
...
})
.catch((error: any) => {
const response = error.response;
if (response) {
if (response.status === 401) {
if (!failcount){
failcount++;
getCustomers();
}
else {
history.push('/login')
}
}
}
})
}
答案 0 :(得分:0)
您可以做的是,使用令牌的“ exp(过期时间)”声明,在知道当前访问令牌即将到期之前,使用刷新令牌抢先获得新的访问令牌。这样至少会删除一个API调用-具有导致401的访问令牌的调用。