3 votes

Réévaluer l'intergiciel Nuxt.js sans changer de route

Je me demande s'il est possible de "réévaluer" les conditions de l'intergiciel sans modifier l'itinéraire actuel.

L'objectif de l'intergiciel est d'empêcher les utilisateurs non connectés d'accéder au "tableau de bord". Mon problème est qu'un utilisateur pourrait être connecté ou déconnecté sans nécessairement changer d'itinéraire, mais il ne serait pas redirigé jusqu'à ce qu'il essaie de changer de page.

J'ai une action VueX qui se déclenche lorsque l'état d'authentification de l'utilisateur change, mais cette action (d'après ce que je peux voir) ne peut pas accéder aux variables de redirection ou d'itinéraire.

// /mixins/auth.js
const reevaluateAuthStatus = (store, redirect, route) => {
  console.log(route)
  const redirectPolicy = route.meta.map((meta) => {
    if (meta.auth && typeof meta.auth.redirectPolicy !== 'undefined') { return meta.auth.redirectPolicy[0] }
    return []
  })

  const user = store.getters['auth/getUser']
  if (redirectPolicy.includes('LOGGEDOUT')) {
    if (user) {
      return redirect('/dashboard')
    }
  } else if (redirectPolicy.includes('LOGGEDIN')) {
    if (!user) {
      return redirect('/login')
    }
  }
}

module.exports = {
  reevaluateAuthStatus
}

// /middleware/auth.js
import { reevaluateAuthStatus } from '../mixins/auth'

export default function ({ store, redirect, route }) {
  reevaluateAuthStatus(store, redirect, route)
}

J'apprécie toute aide à ce sujet :)

1voto

kissu Points 31

Vous ne pouvez pas réévaluer un logiciel intermédiaire AFAIK parce que c'est principalement cela (comme indiqué dans le document la documentation )

les middlewares seront appelés [...] côté client lors de la navigation vers d'autres itinéraires

2 façons propres d'y parvenir IMO :

Des solutions plus ingrates seraient probablement les suivantes :

  • la réalisation d'une setInterval et vérifier si l'état actuel est toujours valide toutes les 5 secondes environ
  • de se rendre sur la même page que celle sur laquelle vous vous trouvez actuellement avec quelque chose comme this.$router.go(0) comme expliqué d'une manière ou d'une autre dans le Documentation du routeur Vue

Cependant, dans la plupart des cas, je ne pense pas que ce problème soit important si l'utilisateur est déconnecté, car il sera simplement redirigé une fois qu'il aura essayé quelque chose.
Comme si l'utilisateur se connectait, je ne sais même pas dans quel cas cela peut se produire s'il ne fait pas quelque chose de pro-actif sur votre SPA.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X