vuex + localStorage 实现 token持久化

Posted 奥特曼 

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vuex + localStorage 实现 token持久化相关的知识,希望对你有一定的参考价值。

一、 通过vuex 和 localStorage 进行配合实现 token持久化

1. 我们知道 用 vuex保存token是为了每个组件都可以访问, 但vuex有一个缺点 就是刷新页面vuex中的数据会清空,这要导致只要用户一登录 并且刷新 保存的token就会消失,为了解决这个问题 我们要把token存在localStorage。

2. 为什么不存在sessionStorage里 个人觉得 sessionStorage虽然可以存储 但是它的生命周期不长,只要关闭页面后 sessionStorage里的数据会自动清空,而localStorage的数据只要不手动删除永远不会消失!!

如何vuex保存token?  跳转链接

二、封装一个保存、获取、删除token  .js文件


const myToken = 'my_token'

// 设置token
export const setToken = (newToken) => {
  localStorage.setItem(myToken, JSON.stringify(newToken))
}

// 获取token
export const getToken = () => {
  return JSON.parse(localStorage.getItem(myToken))
}

// 删除token   
export const remToken = () => {
  localStorage.removeItem(myToken)
}

// 清除所有localStorage的方法是 clear

上面有个注意点哦 如果保存的时候没有转换JSON对象 会将对象转换成字符串类型哦!!

三、保存token到localStorage

注意哈 这里是案例  按自己功能需要写到哪里

// 按需引入 设置token  保存token
import { setToken, getToken } from '../untils/localStorage'
// 保存在vuex 中  只截取了一部分代码 完整vuex在上面链接
 state: {
    // 获取token  如果getToken没有token值 转换为空对象   短路运算
    tokenInfo: getToken() || {}
  },
  // 修改state里的tokenInfo
  mutations: {
    setTokenInfo (state, newSetToken) {
      state.tokenInfo = newSetToken
      // 保存到localstorage
      setToken(newSetToken)
  }

四、魔法字符串

const myToken = 'my_token'

封装的时候我们发现 字符串赋值给了变量 

魔法字符串: 指的是, 在代码之中多次出现, 与代码形成强耦合的某一个具体的字符串或数值. 风格良好的代码, 应该尽量消除魔法字符串, 而由含义清晰的变量代替.

(ES6 -- 阮一峰)

以上是关于vuex + localStorage 实现 token持久化的主要内容,如果未能解决你的问题,请参考以下文章

Vue项目保持用户登录状态(localStorage + vuex 刷新页面后状态依然保持)

Vuex/Vuejs:在 vuex 存储中访问 localStorage

用localStorage坚持Vuex状态----vuex-persistedstate

vuex和localStorage/sessionStorage 区别

vuex和localStorage的区别

如何使用 localStorage 修复 Vuex 中的 JSON 解析错误