You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

54 regels
1.6 KiB

  1. import { createWebHistory, createRouter } from "vue-router";
  2. import routes from "./routes";
  3. import appConfig from "../../app.config";
  4. import store from "../state/store";
  5. const router = createRouter({
  6. history: createWebHistory("/"),
  7. routes,
  8. });
  9. router.beforeResolve(async (routeTo, routeFrom, next) => {
  10. try {
  11. if (routeTo.matched.some((record) => record.meta.requiresAuth)) {
  12. await store.dispatch("user/verifyLogin");
  13. if (!store.getters["user/isAuthenticated"]) {
  14. return next({ name: "otpLogin" });
  15. }
  16. }
  17. // For each matched route...
  18. for (const route of routeTo.matched) {
  19. await new Promise((resolve, reject) => {
  20. // If a `beforeResolve` hook is defined, call it with
  21. // the same arguments as the `beforeEnter` hook.
  22. if (route.meta && route.meta.beforeResolve) {
  23. route.meta.beforeResolve(routeTo, routeFrom, (...args) => {
  24. // If the user chose to redirect...
  25. if (args.length) {
  26. // If redirecting to the same route we're coming from...
  27. // Complete the redirect.
  28. next(...args);
  29. reject(new Error("Redirected"));
  30. } else {
  31. resolve();
  32. }
  33. });
  34. } else {
  35. // Otherwise, continue resolving the route.
  36. resolve();
  37. }
  38. });
  39. }
  40. // If a `beforeResolve` hook chose to redirect, just return.
  41. } catch (error) {
  42. return;
  43. }
  44. document.title = routeTo.meta.title + " | " + appConfig.title;
  45. // If we reach this point, continue resolving the route.
  46. next();
  47. });
  48. export default router;