IgorPI
@IgorPI

Vue middleware защита роутинга?

Коллеги, приветствую!

Пытаюсь понять, как в vue через middleware защитить роутинг.

./router.js
spoiler

/**
 * Vue Router
 *
 * @library
 *
 * https://router.vuejs.org/en/
 */

// Lib imports
import Vue from "vue"
import Router from "vue-router"
import Meta from "vue-meta"

// Routes
import paths from "./paths"
import {store} from "../store/index"


function route(path, view, name, meta) {
  return {
    name: name || view,
    path,
    meta,
    component: (resovle) => import(`@/views/${view}.vue`).then(resovle)
  }
}

Vue.use(Router);
Vue.use(Meta);

// Create a new router
const vueRouter = new Router({
  mode: "history",
  routes: paths.map(path => route(path.path, path.view, path.name, path.meta)).concat([{path: "*", redirect: "/"}]),

  scrollBehavior(to, from, savedPosition) {
    if (savedPosition) {
      return savedPosition
    }
    if (to.hash) {
      return {selector: to.hash}
    }
    return {x: 0, y: 0}
  }
});


vueRouter.beforeEach( async (to, from, next) => {
  const middleware = to.meta.middleware;

  if (!middleware) return next();

  const context = {to, from, next, store};

  for (const name of middleware) {
    let obj = await loadMiddleware(name)
    await obj.default(context)
  }

});

/**
 * @param name
 * @returns {Promise<*>}
 */
async function loadMiddleware(name) {
  return await import(`@/middleware/${name}.js`)
}


export default vueRouter


./middleware/auth.js
spoiler

import {Secure} from "../api/Secure";
import {ACCESS_TOKEN} from "../store/mutation-types";

export default async function ({store, next,}) {
  if (!await checkToken(store.getters[ACCESS_TOKEN]))
    return next("/login")
  return next()
}

/**
 *
 * @param token
 * @returns {Promise<boolean>}
 */
async function checkToken(token) {
  let secure = new Secure()
  try {
    let response = await secure.checkToken({token})
    return response.code === 0;
  } finally {
    secure = undefined
  }
}



За то время пока происходит проверка токена, на несколько секунд отображается информация которую нужно защитить.
Где я ошибаюсь?

Как дождаться проверки и не переходить к запрашиваемому роуту?

Спасибо.
  • Вопрос задан
  • 1396 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы