Я выполняю Сервис для проверки моих токенов доступа. Если я использую почтальон, я получу 3 типа ответов, и в псевдокоде это будет работать так:
//where response.data.status is the response received by my axios post to my backend
if(response.data.status === "valid"){
//allows access
return true
}else if(response.data.status === "jwt expired"){
//refresh the token
//receive a new acces token
//verify again the freshly received access token and return true or false based on this token verification
}else{
//every other case
return false
}
Но проблема в том, что мой (response.data.status === "jwt expired" )
никогда не произойдет, хотя это ответ, который возвращает почтальон если я вижу токен с истекшим сроком доступа. Я не понимаю, почему ax ios не обнаружит этот ответ, всякий раз, когда должно произойти else if(response.data.status === "jwt expired"
, если я console.log(response.data.status)
возвращает неопределенное значение. В то же время я могу правильно настроить console.log в других случаях
Так выглядит мой настоящий код
export default function isAuthenticated() {
var accesstoken = Cookies.get('accesstoken');
return axios({ method: 'post', url: 'http://localhost:3003/verify', headers: { Authorization: `Bearer ${accesstoken}` } })
.then(function (response) {
console.log("initial status of the token: "+response.data.status) //this will return undefined when the case of "jwt expired" must happen, the other ones work properly
if (response.data.status === "valid") {
//case 1 : token valid
console.log("service valid, token didnt need refreshing")
return true;
} else if (response.data.status === "jwt expired") {
//case 2 : token expired
//jwt is expired sends the token to refresh server and returns true or false based on refreshing process
console.log("token is expired, proceds to refresh")
axios({ method: 'post', url: 'http://localhost:3003/refresh_token', headers: { Authorization: `Bearer ${accesstoken}` } })
.then(function (response) {
accesstoken = response.data.accesstoken;
//once ive got the accesstoken return false if failed to refresh or redo the verification
if (accesstoken != "") {
axios({ method: 'post', url: 'http://localhost:3003/verify', headers: { Authorization: `Bearer ${accesstoken}` } })
.then(function (response) {
if(response.data.status === "valid"){
console.log("token refreshed and service valid returned true");
return true;
}else{
console.log("refresh token attempted refresh but returned false")
return false;
}
})
} else {
console.log("refresh token failed to refresh and returned false")
return false;
}
})
} else {
//case 3 : other cases, token invalid / malformed...
console.log("service invalid")
return false;
}
}).catch((error) => { //wont return anything
if (error.response) {
console.log(error.response.data);
console.log(error.response.status);
console.log(error.response.headers);
} else if (error.request) {
console.log(error.request);
} else {
console.log('Error', error.message);
}
console.log(error.config);
});
}