2017-06-02 1 views
0

Ich habe Problem, dass ich immer noch nicht beheben kann, nachdem ich einige Lösung google Suche versuchen.Tritt dead Schleife in router.beforeEach in vue, vue-Router

Ich bin mit router.beforeEach Token exist zu überprüfen.

Wenn ich kein Login und Eingang localhost/Übersicht in URL-Leiste direkt,

es braucht Login-Seite und URL umleiten zu localhost/login aber fehlschlagen und zeigen die Fehlermeldung umleiten unten überschritten

maximale Anrufstapelgröße

Wie kann ich die router.beforeJeach Methode ändern?

In router.js

import Vue from 'vue' 
import store from '@/store/index' 
import Router from 'vue-router' 
import Overview from '@/components/Overview' 
import Login from '@/components/Login' 

Vue.use(Router) 

const router = new Router({ 
    mode: 'history', 
    routes: [ 
     { 
      path: '/', 
      name: 'Login', 
      component: Login, 
      meta: { 
       requiresAuth: false 
      } 
     }, 
     { 
      path: '/overview', 
      name: 'Overview', 
      component: Overview, 
      meta: { 
       requiresAuth: true 
      } 
     },   
     { 
      path: '*', 
      redirect: '/login', 
      meta: { 
       requiresAuth: false 
      } 
     } 
    ] 
} 



router.beforeEach((to, from, next) => { 
    let token = store.state.token 
    if (token) { 
     if (to.query.redirect) { 
      next({path: to.query.redirect}) 
     } else { 
      if (['/login'].includes(to.path)) { 
       next({path: '/overview'}) 
      } else { 
       next() 
      } 
     } 
    } else { 
     let requiresAuth = to.matched.some(record => record.meta.requiresAuth) 
     if (requiresAuth) { 
      next({path: '/login', query: { redirect: to.fullPath }}) 
     } else { 
      next() 
     } 
    } 
}) 


export default router 

Antwort

2

Seien Sie sicher, dass Ihre Logging-Pfad Auth selbst nicht erforderlich ist/dass Ihr Mechanismus zu erkennen, ob eine Seite benötigt Auth korrekt ist.

Beachten Sie, dass Ihre Navigationsschutzfunktion jedes Mal aufgerufen wird, wenn eine Route erreicht wird, auch wenn Sie den Benutzer programmatisch in Ihren Navigationsschutz selbst umleiten. Sie sollten dies also berücksichtigen, um eine Funktion zu erstellen, die keine Schleife ausführt (d. H. Eine Weiterleitung auslöst, die eine Weiterleitung auslöst ...).

+0

Dank Ihrer Erinnerung. Ich habe das Problem gefunden .... Nur habe ich vergessen, eine '/ login' route config zu definieren. – tommychoo