【发布时间】:2020-04-16 11:10:19
【问题描述】:
我正在开发一个包含许多 API 请求的反应应用程序。应用程序的结构是
登录时,我收到一个响应令牌,并将令牌保存在本地存储中以用于其他 API 请求。
此令牌每 30 分钟过期一次,如果我在 30 分钟后发出 API 请求,我的请求中将收到 401 状态。我正在使用这个 401 状态来注销并清除本地存储中的令牌数据。
示例请求
export function stationDailyUsage(data) {
return dispatch => {
dispatch(dailyUsageLoading());
axios.get(`${API_URL}/Dashboard/DailyUsage?type=${data.type}&date=${data.date}`, {
headers: {
'Authorization': `Bearer ${token}`
},
})
.then(res => {
if (res.data.success === true) {
dispatch(dailyUsageSuccess(res.data));
} else {
console.log("error");
}
})
.catch(function (error) {
if(error.response.status === 401){
dispatch(logout());
}
});
}
}
因此,要以这种方式注销,我必须对我使用的每个 API(大约 40 个 API)进行此检查。这是最好的方法还是有更好的方法来处理注销。我读过axios interceptors,但不清楚如何在我的系统中实现它。非常感谢任何帮助。
【问题讨论】:
-
我认为使用 axios 拦截器会更好,在您的情况下,您还应该获得 refresh token 以及身份验证令牌。因此,每当您在 30 分钟后进行第一次 API 调用并发现它显示 401 时,您应该使用该刷新令牌来获取新令牌并更新本地存储中的令牌。
-
就我而言,我没有刷新令牌
标签: javascript reactjs redux axios token