我们的Redux应用程序使用JWT令牌进行身份验证。 access_token每15分钟到期一次,refresh_token每30天到期一次。每次登录并存储在浏览器的本地存储中时,它们都由我们的API提供。如果安全端点收到带有过期令牌的请求,则会返回401 HTTP错误。
不幸的是,我不知道如何继续处理刷新过程而不会对用户产生负面影响。从技术角度来看,这就是我想要实现的目标:
我想有一个处理刷新过程的函数,并且会在动作创建器的错误处理部分调用。
这是我到目前为止所尝试的内容:
export function handleError(dispatch, current_func, error, handling) {
if(error.response) {
if(error.response.status === 401 && readToken("token") !== null) {
return attemptTokenRefresh(dispatch, current_func)
}
if(error.response.status === 422 && readToken("token") === null) {
return attemptTokenRefresh(dispatch, current_func)
}
}
return(handling())
}
export function attemptTokenRefresh(dispatch, on_success) {
let token = readToken("refresh_token");
let instance = axios.create({
headers: {"Authorization": token}
});
instance.post("api/refresh").then(response => {
if (response.data["token"]) {
storeToken("token", response.data["token"]);
on_success();
}
}).catch(error => {
//TODO: Allow user to sign back (prevent wiping the state)
});
}
dispatch 是指Redux提供的调度功能
current_func 是指动作创建者
错误是指API返回的错误
处理是指其他类型错误的错误处理函数
非常感谢任何帮助:)