Closed
Description
Hi,
I am trying to auto retry if there was an error. I am using JWT with refresh tokens and want to refresh the token if the server sends an error.
const apiFetch = $fetch.create({
retry: 1,
keepalive: true,
async onRequest({ request, options }) {
var token = useCookie<tokenObject>("token").value;
if (token && token.access_token) {
options.headers = { Authorization: "Bearer " + token.access_token };
}
},
async onResponseError({ request, response, options }) {
if (response.status === 403) {
const config = useRuntimeConfig();
const check = new Promise((resolve, reject) => {
try {
apiFetch(`${config.DOMAIN}/api/refresh`, {
method: "POST",
body: {
refreshToken: useCookie<tokenObject>("token").value.refresh_token,
},
}).then((res) => {
const token = res;
useCookie<tokenObject>("token").value = token;
option
714C
s.retry = 1;
resolve(true);
});
} catch (err) {
reject();
}
});
console.log("hi");
console.log(options);
}
},
});
The code to catch the request
async logout() {
const config = useRuntimeConfig();
await apiFetch<dataObject>(`${config.DOMAIN}/api/users/logout`, {
retry: 3,
method: "POST",
body: {
token: useCookie<tokenObject>("token").value.refresh_token,
},
}).then(() => {
useCookie("user").value = undefined;
useCookie("token").value = undefined;
this.user = null;
this.token = null;
this.isAuthenticated = false;
this.isAdmin = false;
this.isMod = false;
this.isAffiliate = false;
const router = useRouter();
router.push("/");
});
},
example of call. both have retry both don't retry.
Let me know :)