// Repository.js import Vue from "vue"; import axios from "axios"; import store from "@/store"; //const baseDomain = "http://localhost:5443"; const baseDomain = ""; const API_URL = `${baseDomain}/api/v1`; const api = axios.create({ baseURL: API_URL, }); api.interceptors.request.use(async function(config) { if (store.getters.isAuthenticated) { const token = store.state.access_token; config.headers.Authorization = `Bearer ${token}`; } else { if(store.getters.isRefreshTokenValid){ await store.dispatch('refreshToken'); const token = store.state.access_token; config.headers.Authorization = `Bearer ${token}`; /*store.dispatch('refreshToken').then( () => { const token = store.state.access_token; config.headers.Authorization = `Bearer ${token}`; }).catch( () => { window.location = '/login'; });*/ } else { Vue.swal({ title: "Session Expired", text: "Your token/session has expired. Would you like to be redirected to the login page?", type: "warning", showCancelButton: true, confirmButtonColor: "#DD6B55", confirmButtonText: "Yes", }).then( (result) => { if(result.value) { window.location = '/login'; } else { window.location = '/'; } }); } } return config; }); api.interceptors.response.use(function (response) { return response; }, function (error) { if (401 === error.response.status || 422 === error.response.status) { if(store.getters.isAuthenticated){ // if 401 even though the token is valid, the user might have been deleted, etc. store.dispatch('resetToken'); } Vue.swal({ title: "Session Expired", text: "Your token/session has expired. Would you like to be redirected to the login page?", type: "warning", showCancelButton: true, confirmButtonColor: "#DD6B55", confirmButtonText: "Yes", }).then( (result) => { if(result.value) { window.location = '/login'; } else { window.location = '/'; } }); } else { //console.error(error); //console.error(error.response); console.error(error.response.data.message); //return Promise.reject(error); return Promise.reject(error.response); } }); export default api;