问答

vue-router 中无法获取vuex中的数据

作者:admin 2021-05-07 我要评论

想做登录的导航守卫 发现获取到的数据是{__ob__: Observer} 并不是想要的数据 vue-router import store from '../store'router.beforeEach((to, from, next) = {...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

想做登录的导航守卫 发现获取到的数据是{__ob__: Observer} 并不是想要的数据

vue-router

import store from '../store'

router.beforeEach((to, from, next) => {
  const userInfo = store.state.userInfo
  console.log(userInfo); //结果是{__ob__: Observer} 导致无法拦截
  if (to.path === '/login') {
    return next()
  } else {
    if (userInfo) {
      return next()
    } else {
      return next('/login')
    }
  }
});
###

一般登录的时候会获取到后端传过来的token,将token通过sessionstorage或者cookie储存起来,在导航守卫router.beforeEach中获取token来作为登录的依据。

如果没有使用token的话,可以采用用户名或者变量(isLogin)来作为登录的依据。(这种方法没有使用token安全)。

在vuex中登录的方法中调用登录api成功之后,将登录用户名username或者isLogin储存进cookie里。

// store/index.js
// 其他内容省略

actions: {
    // 登陆
    login ({commit}, userInfo) {
      return new Promise((resolve, reject) => {
        frontUserApi.getBaseUserLogin(userInfo).then(res => {
          if (res.data.userId) {
            commit('setName', res.data.username) // 保存username到vuex
            commit('setIsLogin', true) // 保存userId到vuex
            Cookies.set('username', res.data.username) // 保存用户名到cookie
            Cookies.set('isLogin', true) // 保存islogin到cookie
          }
          resolve(res)
        }).catch(err => {
          reject(err)
        })
      })
    }
}

而不要对象或者数组之类比较复杂的东西。另外也不要使用vuex(store)中来作为登录的依据,因为只要刷新,vuex会被清空。使用sessionstorage或者cookie都可以。

之后就在router中就简单了。

import Cookies from 'js-cookie'

router.beforeEach((to, from, next) => {
  const isLogin = Cookie.get('isLogin')
  if (to.path === '/login') {
    return next()
  } else {
    if (isLogin) {
      return next()
    } else {
      return next('/login')
    }
  }
});
###

我看默认的userInfo的值是{},那即使没有登陆,也走不到return next('/login')呀。

###

store.state.userInfo 赋值了没

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • vue-router 中无法获取vuex中的数据

    vue-router 中无法获取vuex中的数据

  • ie浏览器中如何调用电脑摄像头

    ie浏览器中如何调用电脑摄像头

  • 美图秀秀插件问题

    美图秀秀插件问题

  • 在虚拟机Ubuntu上换源,卡在 Updating

    在虚拟机Ubuntu上换源,卡在 Updating

腾讯云代理商
海外云服务器