Skip to content

Instantly share code, notes, and snippets.

@fallinov
Last active March 7, 2023 10:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fallinov/9f89af02998de1714e72d49bca50c6f0 to your computer and use it in GitHub Desktop.
Save fallinov/9f89af02998de1714e72d49bca50c6f0 to your computer and use it in GitHub Desktop.
// Exemple de boot AXIOS pour Quasar
import { boot } from 'quasar/wrappers'
import axios from 'axios'
// Initialisation de l'API
const monApi = axios.create({
baseURL: 'https://mon.api.com/',
timeout: 30000,
headers: {
Accept: 'application/json',
'Content-Type': 'application/json'
}
})
/**
* Test si l'expiration du token et plus petite que la limite fixée
* par rapport à l'heure actuelle.
*
* Retourne vrais si token en dessous de la limite
*
* @param dateExpiration - Date d'expiration
* @param limiteEnMinutes - Limite en minutes
* @returns {boolean}
*/
function tokenLimite (dateExpiration, limiteEnMinutes) {
const dateActuelle = parseInt(Date.now() / 1000)
const dateLimite = dateExpiration - 60 * limiteEnMinutes
return (dateActuelle - dateLimite) > 0
}
export default boot(({ app, store }) => {
// Interception de toutes les requêtes AXIOS
monApi.interceptors.request.use(function (config) {
// Récupère le token de l'utlisateur actuel
const token = store.getters['auth/token'] || null
// Si un token existe, alors on l'ajoute aux headers
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
// Récupère l'utilisateur actuel
const utilisateur = store.getters['auth/utilisateur'] || null
// Rafraichit le token si validité inférieure à 5 jours
if (
utilisateur &&
config.url !== '/auth/refresh' &&
tokenLimite(utilisateur.tokenExpiration, 9600)
) {
store.dispatch('auth/refresh')
}
return config
}, function (error) {
// Traitement des erreurs
return Promise.reject(error)
})
// Interception de toutes les réponses AXIOS
// Déconnecte automatiquement l'utilisateur si erreur 401
monApi.interceptors.response.use(function (response) {
return response
}, function (error) {
if (
error.response.status === 401 &&
error.response.config.url !== '/auth/logout' &&
error.response.config.url !== '/auth/login'
) {
store.dispatch('auth/logout')
}
return Promise.reject(error)
})
// Permet d'utiliser les raccourcis suivant dans les fichiers Vue this.$axios and this.$api
app.config.globalProperties.$axios = axios
app.config.globalProperties.$api = monApi
})
export { monApi }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment