首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VueRouter甚至在调用Vue.beforeCreate函数之前就改变了路由。

VueRouter甚至在调用Vue.beforeCreate函数之前就改变了路由。
EN

Stack Overflow用户
提问于 2017-09-22 07:43:55
回答 1查看 1.9K关注 0票数 3

我是vue.js的新手,我在初始化路由器方面遇到了问题。

当用户点击'/‘’我想重定向到'/home‘,如果用户已经注册了,否则将他重定向到’/登录‘。成功登录后,我将在localStorage中保存访问令牌。每当用户重新访问页面时,我都会从localStorage获取令牌,并在我的vuex存储中设置并相应地重定向他。

但问题是,即使用户已经登录,它总是重定向到‘/登录’页面。对路由器的呼叫在设置令牌之前正在执行。

下面是我的密码。请告诉我如何解决这个问题。

代码语言:javascript
复制
//main.js
import Vue from 'vue';
import Vuetify from 'vuetify';
import App from './App';
import { store } from './store';
import router from './router';

Vue.use(Vuetify);
Vue.config.productionTip = false;


/* eslint-disable no-new */
new Vue({
  el: '#app',
  store,
  router,
  template: '<App/>',
  components: { App },
  beforeCreate () {
    const token = localStorage.getItem('userToken');
    this.$store.dispatch('autoSignInToken', token);
  }
});

//router.js
import Vue from 'vue';
import Router from 'vue-router';
import Login from '@/components/User/Login';
import Hello from '@/components/Hello';
import AuthGuard from './auth-guard'

Vue.use(Router);

export default new Router({
  routes: [
    {
      path: '/',
      name: 'Home',
      redirect: '/home',
    },
    {
      path: '/login',
      name: 'Login',
      component: Login,
      beforeEnter: AuthGuard
    },
    {
      path: '/home',
      name: 'Home',
      component: Hello,
      beforeEnter: AuthGuard,
    },
  ],
});

//auth-guard.js
import {store} from '../store'

export default (to, from, next) => {
  if (store.getters.user) {
    if(to.fullPath === '/login') {
      next('/home');
    } else {
      next();
    }
  } else {
    if(to.fullPath !== '/login') {
      next('/login');
    } else {
      next();
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-22 07:59:47

那么,您根本不需要在beforeCreate中添加令牌,是吗?您根本不访问Vue实例,您只使用localStorage和商店。

所以在你创建路由器之前就做吧。

代码语言:javascript
复制
const token = localStorage.getItem('userToken');
store.dispatch('autoSignInToken', token);

export default new Router({
  routes: [
  // ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46359421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档