如何在redux传奇中获得jwt refreshtoken



我正在使用jwt令牌

假设登录时已保存accesstoken和refreshtoken。

getPostAPI是一个导入post数据的API,refreshAPI是acesstoken的重新发布。

在accesstoken到期之前,如果我发出getPostAPI请求,它的响应很好,但当accesstoken过期时,会发生403错误。此时,当在getPost函数的catch(err(中检测到err时,通过REFRESH_REQUEST执行refreshAPI,当发出accesstoken时,将其保存在AsyncStorage中,然后执行getPost_REQUEST来执行getPostAPI以获得良好的响应。

但我不确定我使用的方法是否正确。

我做得对吗?

这是我的代码

function getPostAPI(data) {
return axiosInstace.post('/kakao/getpost', data);
}
function* getPost(action) {
try {
const result = yield call(getPostAPI, action.data);
yield put({
type: GETPOST_SUCCESS,
data: result.data,
});
} catch (err) {
yield put({
type: REFRESH_REQUEST,
});
yield put({
type: GETPOST_REQUEST,
data: action.data,
});
}
}
function refreshAPI() {
return axiosInstace.post('/kakao/refresh');
}
function* refresh() {
try {
const result = yield call(refreshAPI);
AsyncStorage.setItem('accesstoken', `${result.data.accessToken}`, () => {});
yield put({
type: REFRESH_SUCCESS,
data: result.data,
});
} catch (err) {
yield put({
type: REFRESH_FAILURE,
error: err.response.data,
});
}
}
function* getPost(action) {
try {
const result = yield call(getPostAPI, action.data);
yield put({
type: GETPOST_SUCCESS,
data: result.data,
});
} catch (err) {
yield put({
type: REFRESH_REQUEST,
});
yield put({
type: GETPOST_REQUEST,
data: action.data,
});
}
}

调用刷新功能而不是REFRESH_REQUEST动作

并在REFRESH_SUCCESS动作上调用getPost函数

function* getPost(action) {
try {
const result = yield call(getPostAPI, action.data);
yield put({
type: GETPOST_SUCCESS,
data: result.data,
});
} catch (err) {
yield refresh();
yield put({
type: GETPOST_REQUEST,
data: action.data,
});
}
}
function* refresh() {
try {
const result = yield call(refreshAPI);
AsyncStorage.setItem('accesstoken', `${result.data.accessToken}`, () => {});
yield put({
type: REFRESH_SUCCESS,
data: result.data,
});
yield getPost(data);
} catch (err) {
yield put({
type: REFRESH_FAILURE,
error: err.response.data,
});
}
}

最新更新