Я считаю, что проблема в том, что вы получаете токен, когда делаете запрос в другом месте.
Вот последовательность событий, поскольку я верю, что это происходит.
- auth.js contstructor запускает запрос на получение токена
- auth.js назначает токен из хранилища (отсутствует при первой загрузке) по умолчанию
- somecomponent.vue выполняет вызов API с использованием отсутствующего токена (сеанс пуст)
- auth.js завершает getToken и назначает новый токен заголовкам по умолчанию
- вызов api somecomponent.vue завершается неудачно, поскольку вызов API не имеет токена
Теперь, когда вы обновите страницу ...
- auth.js contstructor запускает запрос на получение токена
- auth.js назначает токен из хранилища
- somecomponent.vue выполняет вызов API с использованием токена из хранилища сеансов
- auth.js завершает getToken и обновляет токен в сеансе
- вызов api somecomponent.vue выполняется успешно, поскольку вызов API использовал правильный токен до того, как функция getToken получила новый
Если это так, все, что вам нужно сделать, это отложить любые действия API, пока вы не получите токен. Конечно, это может быть не так просто, потому что вам нужно знать, установлен ли токен, и связывать запросы или каким-то образом.
Вы можете попробовать удерживать перенаправление, пока ваш getToken не преуспеет (хотя я не знаю, как вы справляетесь с этим), заставив функцию возвращать обещание
getToken(){
let options = {
method: "post",
url: "/getapitoken",
headers: {
'Accept': 'application/json'
}
};
return axios(options)
.then(response => {
let token = response.data.token
if (token) {
this.issetToken(token);
return token;
}
})
.catch(({ response }) => {
console.warn(response);
});
}
и тогда вы сможете использовать что-то вроде window.auth.getToken().then(()=>doMyRedirect())
В прошлом я справлялся с этими ситуациями с помощью Vuex, и в хранилище Vuex хранится информация о состоянии, поэтому любая другая функция может проверять, извлекается ли токен в данный момент, поэтому другие запросы не выполняются одновременно. , но это все еще требует некоторой логики для выполнения запросов после.