我在Node中有一个React应用和一个API。对于登录,在API中,我创建令牌并将令牌刷新为仅HTTP cookie。我也使用csurf。因此,当令牌过期时,如果用户尝试访问某些私有路由,他将收到错误401。因此,我想使用axios拦截器来处理此问题。如果令牌已过期并返回401,则axios应访问资源“ / token”以生成一个新令牌。如果我假设在不使用try catch的情况下,生成新令牌的过程中不会发生任何错误,则请求成功,但是此请求可能会失败并返回401错误,例如,发送的用户ID可能与刷新令牌用户不匹配ID。如果发生错误,我要注销。 有人可以帮忙吗?
api.interceptors.response.use(
(response) => {
return response;
},
async (err) => {
const userStorage = localStorage.getItem('@user');
if (!userStorage) {
return Promise.reject(err);
}
const { id } = JSON.parse(userStorage);
const originalReq = err.config;
if (err.response.status === 401) {
try {
const response = await api.post(
`${process.env.REACT_APP_API_URL}/sessions/token`,
{ id },
);
updateUser(response.data.user);
originalReq._retry = true;
return api(originalReq);
} catch (error) {
return api.delete(
`${process.env.REACT_APP_API_URL}/sessions/logout`,
{},
);
}
}
return Promise.reject(err);
},
);