我正在使用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,
});
}
}