Vuex数据持久化---token(个人理解)

想要弄明白这个命题,首先要了解token是什么。

一.Token

顾名思义嘛,令牌,可以理解为一种身份验证标识。

举个例子,你去游乐园玩,进去得要门票吧,不然门口的保安大哥怎么都不会让你进去,token就像是一张(年卡门票)。

那问题来了,全国那么多游乐园,我不可能拿着一家的票逛全国的游乐园吧。所以每家游乐园发的门票都是独一无二的。

这里的游乐园其实就是各个网站,你在网站登录后,服务器就会结合你的用户信息,发一个你的专属token。

二.Token的存储问题

我们一般会把从服务器请求来的数据存储到Vuex中。因为Vuex容器中的数据,可以在各个项目组件中直接拿出来用,更加方便代码的编写。

但是!!!

这里就引出了一个问题,比如用户完成了登录,这时他非常开心的刷新一下页面。

Vuex容器中的数据将会丢失状态,也就是刚从服务器获取的Token它就没了。

也就是说服务器辨识不了用户的身份,他又得重新登陆一遍,再获取一遍token。

如果不解决这个问题,那明天可能你就被经理炒了。

 三.Token储存问题的解决方案

(1)问题的关键点就在于:让token在刷新或关闭页面之后不丢失

  我们可以在登陆成功后Vuex获取token的同时,在本地也保存一份token。

  我的做法就是封装一套本地存储token的方法,代码如下:

 图中用到的js-cookie是一个简单的,轻量级的处理cookies的js API

具体用法可以查询官方文档。

(2)那么下面就要处理在Vuex中token的存储了

import { setToken, removeToken, getToken } from '@/utils/auth'
import { login } from '@/api/user'
export default {
  namespaced: true,
  state: {
    token: getToken() || null
  },
  mutations: {
    setToken(state, newToken) {
      state.token = newToken
      setToken(newToken)
    },
    // 删除token
    removeToken(state) {
      state.token = null // 删除vuex的token
      removeToken()
    }
  },
  actions: {
    async userlogin(context, data) {
      const res = await login(data)
      console.log(data)
      //   console.log(res)
      context.commit('setToken', res.data)
    }
  }
}

代码中的处理主要遵循三个思路:

  1. 在对token进行初始化的时候先从本地取一下,优先使用本地取到的值

  2. 在设置token的时候除了在vuex中存一份,在本地也同步存一份

  3. 在删除token的时候除了把vuex中的删除掉,把本地的也一并删除

各位看官老爷,记得三连呀!

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值