How authentication process work in Single Page Application (SPA)
🌍 General concept
// Hook de Navigation : Exécuté avant chaque navigation
router.beforeEach((to, from, next) => {
// Étape 1: Accéder aux informations de l'utilisateur authentifié
const authUser = store.getters["auth/authUser"];
// Étape 2: Vérifier si la route nécessite une authentification
const reqAuth = to.matched.some((record) => record.meta.requiresAuth);
// Étape 3: Préparer l'objet de requête de redirection vers la page de connexion
const loginQuery = { path: "/login", query: { redirect: to.fullPath } };
if (reqAuth && !authUser) {
// Étape 4: La route nécessite une authentification, mais l'utilisateur n'est pas authentifié
// Étape 5: Dispatch de l'action pour obtenir les informations d'authentification de l'utilisateur
store.dispatch("auth/getAuthUser").then(() => {
// Vérifier à nouveau si l'utilisateur est authentifié après la résolution de l'action asynchrone
if (!store.getters["auth/authUser"])
// Étape 6: Redirection vers la page de connexion avec la redirection préparée
next(loginQuery);
else
// Étape 7: Utilisateur authentifié, permettre la continuation de la navigation
next();
});
} else {
// Étape 8: La route ne nécessite pas d'authentification, permettre la continuation de la navigation
next(); // Assurez-vous toujours d'appeler next()!
}
});
⚠️ Notabene
Using this approch can costs a lot of request if we test for a token validity everytime we use it. Instead we can just check for a variable in our localstorage
Our variable in localstorage will be updated when:
- users loged in
- users loged out
- token has expired and refresh token is no longer valide