сетка, куда добавить метаданные маршрутизатора

Я хочу защитить паролем определенные маршруты и хочу добавить метаданные к каждому маршруту следующим образом:

{
  path: '/route-path',
  name: 'route-name',
  component: ComponentName,
  meta: {
    requiresAuth: true
  }
}

Так что я могу это проверить

router.beforeEach((to, from, next)

У меня есть доступ к router.beforeEach в main.js, но где мне добавить флаг аутентификации для каждого маршрута? gridsome.config.js не работает?


person scar    schedule 13.10.2020    source источник


Ответы (2)


Ищу то же самое. Единственное, что приходит в голову, это заменить свойство router.options.routes следующим образом:

// main.js

import { myRoutes } from '@/router'

export default function (Vue, { appOptions, router, head, isClient }) {          
  // Set vue plugins                                                                
  Vue.use(Vuex)                                                                  
                                                   
                                                                                 
  // Set default layout as a global component                                       
  Vue.component('Layout', DefaultLayout)                                            
                                                                                 
  router.options.routes = myRoutes                                                                                                      
                                                                                 
  router.beforeEach((to, from, next) => {                                        
    // implement navigation guards                                                       
    next()                                                                       
  })                                                                             
}                   

где myRoutes - это список ваших объектов маршрута:

// router/index.js

import Component1 from '@/components/Component1.vue'

export myRoutes = [
  {
    path: '/route-path',
    name: 'route-name',
    component: Component1,
    meta: {
      requiresAuth: true
    }
  },
  // ...
]

Если вы нашли лучшее решение, дайте мне знать.

person Da Lembert    schedule 27.11.2020
comment
Удалось ли вам заставить это работать? Мне не удалось ... Созданные маршруты переопределяют this.$route - person camwhite; 03.06.2021

Хотя в настоящее время это не задокументировано, вы можете использовать create page API и передать ему route недвижимость, например ...

src / pages.js

module.exports = [
  {
    path: '/',
    route: {
      name: 'index',
      meta: {
        requiresAuth: false
      }
    },
    component: './src/views/Index.vue'
  }
]

gridsome.server.js

const pages = require('./src/pages')

module.exports = function (api) {
  api.createPages(({ createPage }) => {
    for (const page of pages) {
      createPage(page)
    }
  })
}

Я также переместил компоненты страницы в каталог src/views, чтобы избежать автоматической генерации маршрута.

person camwhite    schedule 03.06.2021