Как отключить доступ к странице входа и регистрации, когда пользователь вошел в систему? - PullRequest
1 голос
/ 28 марта 2020

Я запутался, почему это не работает.

Маршруты

const router = new VueRouter({
  mode: 'history',
  routes: [
      { path: '/', component: Home,  name: 'Home', meta: { requiresAuth: true }},
      { path: '/adminarea', component: Admin, name:"Admin", meta: { requiresAuth: true }},
      { path: '/login', component: Login, name: 'Login'},
      { path: '/signup', component: Register,  name: 'Signup'},
  ]
});

router.beforeEach((to, from, next) => {
  if (to.matched.some(record => record.meta.requiresAuth)) {
    // this route requires auth, check if logged in
    // if not, redirect to login page.
    if (!store.getters.getAuth) {
      next({ name: 'Login' })
    } else {
       next();
    }
  } else {
    next()
  }

});

to.matched. некоторые (record => record.meta.requiresAuth эта строка должна разрешать только маршруты с мета requireAuth, но я не знаю, почему это разрешает и другие маршруты.

Я могу вручную получить доступ к входу и регистрации страниц. Я не могу понять, что здесь не так.

1 Ответ

1 голос
/ 28 марта 2020

Я включил значение disableIfLoggedIn в мета-раздел маршрутизатора

{
    name: 'login',
    path: '/login',
    component: Login,
    meta: {
        disableIfLoggedIn: true
    }
},

, который будет проверять перед каждой навигацией по маршруту

import {store} from "./store"; // import the store to check if authenticated

router.beforeEach((to, from, next) => {
    // if the route is not public
    if (!to.meta.public) {
        // if the user authenticated
        if (store.getters.isAuthenticated) { // I declared a `getter` function in the store to check if the user is authenticated.
            // continue to the route
            next();
        } else {
            // redirect to login
            next({name: 'login'});
        }
    }
    next();
});

Внутри store объявляется getter функция для проверки подлинности или нет

const getters = {
    isAuthenticated: state => {
        return state.isAuth; // code to check if authenticated
    }
};

Для мета-значения disableIfLoggedIn можно установить значение true в любом объекте маршрутизатора. Тогда он не будет доступен после входа в систему.

...