vue实现接口加token+vuex刷新丢失问题

从零开始之stm32之CAN通信 CAN通信极简教程(小白友好版),从小白的视角了解并实现简单的STM32F103的CAN通信,直接上手。 阅读详情

第一步vuex
要想实现接口添加token、首先要存起来,这里我是用vuex来存储token和其他用户信息。如果不想使用也可以使用localStorage和sessionStorage来进行储存。因为vuex中存储的数据刷新页面后就会丢失,所以也需要使用localStorage和sessionStorage进行配合。这里的Storage就是sessionStorage,只是进行封装了。为什么这么写呢?因为使用mutations方法赋值后,state的值虽然会变,但是刷新后又会变为初始,但是他的初始值是从localStorage和sessionStorage获取,而localStorage和sessionStorage的值在mutations方法中也一起赋值了,所以刷新后,就算值变为初始值,也不会丢失。

import {Storage} from '../util/zmxTool.js'
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    // 存储token
    Authorization: Storage.get('Authorization') ? Storage.get('Authorization') : '',
    // 用户信息
    userInfo: Storage.get('userInfo') ? Storage.get('userInfo') : '',
    // 菜单数据
    menuData: Storage.get('menus') ? Storage.get('menus') : '',
  },
  /* actions: {
     changeLogin(ctx,Authorization){
       ctx.commit('changeLogin',Authorization);
     }
   },*/
  mutations: {
    // 修改token,并将token存入localStorage
    changeToken (state,user) {
      state.Authorization = user
      Storage.set('Authorization', user);
    },
    // 修改token,并将token存入localStorage
    changeUser(state,user){
      state.userInfo = user;
      Storage.set('userInfo', user);
    },
    changeMenus(state,user){
      state.menuData = user;
      Storage.set('menus', user);
    }
  }
});

数据的存取
这里使用vuex的辅助函数

...mapMutations(['changeToken','changeUser']),
          // 登录
          login(){
            login({
              password:this.input2,
              userName:this.input
            }).then(res=>{
              console.log(res);
              if (res.code==200){
                let redirect = decodeURIComponent(this.$route.query.redirect || '/index');
                this.$router.push({ path: redirect })
                //获取token
                this.changeToken(res.token)
               // 获取用户信息
                this.changeUser(res.data)
              }
            })
          }

第二步 接口封装
添加token就是在这里添加。在请求拦截器里添加config.headers.satoken = store.state.Authorization,这里store.state.Authorization就是store里存储的token值。

import axios from "axios";
import { Message } from "element-ui";
import store from '../store'
import router from '../router'

console.log(localStorage.getItem("api"));
//使用create方法创建axios实例
let Service = axios.create({
  timeout: 10000, // 请求超时时间
  baseURL:localStorage.getItem('api'),//默认路径,这里也可以使用env来判断环境,此处在static/config/config.js定义
})
// 添加请求拦截器
Service.interceptors.request.use(config => {
  // 添加token
  if (store.state.Authorization) {
    config.headers.satoken = store.state.Authorization
  }
  return config
})
// 添加响应拦截器
Service.interceptors.response.use(response => {
  if(response.data.code === 401) {
    // 401 说明 token 验证失败
    // 可以直接跳转到登录页面,重新登录获取 token
    router.push( '/login')
    Message.info('身份验证已失效,请重新登陆')
  } else if (response.data.code === 500) {
    // 服务器错误
    // do something
    Message.info(response.data.msg)
    return Promise.reject(response.data)
  }
  return response.data
}, error => {
  if(error.message.includes('timeout')){
    Message.info('服务器繁忙')
  }
  if(error.response.status === 401) {
    // 401 说明 token 验证失败
    // 可以直接跳转到登录页面,重新登录获取 token
    location.href = '/login'
  } else if (error.response.status === 500) {
    // 服务器错误
    // do something
    return Promise.reject(error.response.data)
  }
  const msg = error.Message !== undefined ? error.Message : ''
  Message({message: '网络错误' + msg, type: 'error', duration: 3 * 1000})
  // 返回 response 里的错误信息
  return Promise.reject(error.response.data)
})
export { Service };

第三步、使用封装接口
这样调用接口,你添加token的才会起作用。

import { Service } from "@/api/Service.js";

export const cloud_Info = params => {
  return Service({
    url:"/api/cloud/get/count/Info",
    method: "post",
    data: params,
  });
};

引入

import {cloud_Info} from '../../api/cloudResource.js'

使用

cloud_Info().then(res=>{
        
      })

如有更好的方法,还请告诉我哦

【Cadence】Virtuoso@LayoutXL 差分电路版图镜像同步技巧详解 本文详细介绍了在Cadence Virtuoso LayoutXL中实现差分电路版图镜像同步的技巧,包括核心需求、环境配置、分步操作指南及高级技巧。通过使用LayoutXL的Group功能,工程师可以高效保持差分电路的对称性,提升版图迭代效率,确保高速信号处理的稳定性。特别适用于深亚微米工艺下的差分放大器设计。 阅读详情

相关推荐

基础知识学习 -- qnx 系统

qnx os车载系统

求变,从思想开始 3875

vue中token登录验证,页面刷新导致token失效的解决办法

第一步:在store下的index.js文件夹中给状态管理添加token字段,如下所示 第二步:在需要进行判断的页面获取状态中token字段判断,是否有值从而判断登录状态。 第三步:在App组件中监听页面的刷新,一旦刷新就将浏览器会话存储中的token 赋值到状态管理,保证页面刷新依然是登录状态。 ...

qq_43440532的博客 6557

Linux下基于AHCI controller模块实现SATA Platform驱动附代码详细流程

本文主要是针对ARM A55集成了AHSATA controller模块开发sata驱动,通过Platform的形式在linux识别到SSD,本文详细讲述整个开发过程,同时对SATA Platform驱动进行讲解。1、配置SATA Phy的初始化;2、打开SATA Platform相关编译开关;3、配置设备树;4、linux启动识盘。

Luckiers的博客 2497

vue前端刷新token实现(亲测有效)

实现思路 这里用的请求框架是axios,所以我在这里主要是在请求拦截器里实现token刷新逻辑处理的。先大概说一下整个思路: 我们这里是在token即将过期的时候进行token刷新,而不是已经过期了才去刷新,这里即将过期的时间设置的是10分钟(这里有一个特别的点,就是我这里和后台协商,如果过期了20分钟内也让刷新token,超过过期20分钟,则判断为已过期,退出登录。所以这里请根据自身需求进行修改即可),这个时间在下面代码判断中可以根据自己项目情况自行调整。 一般一个页面同时会有很多个请求,所以我们需要建一

DLGDark的博客 1万+

微处理器实验报告-实验四

实验四 可编程定时/计数器8253实验 一、实验要求 利用8086外接8253可编程定时/计数器,可以实现方波的产生。 二、实验目的 1、学习8086与8253的连接方法。 2、学习8253的控制方法。 3、掌握8253定时器/计数器的工作方式和编程原理

青竹小轩的博客 5112

Cadence仿真实战:从零构建高精度带隙基准电压源

本文是一份详细的Cadence仿真实战指南,指导读者从零开始构建高精度带隙基准电压源。文章首先解释了带隙基准电压源稳定输出电压的原理,然后逐步演示了在Cadence Virtuoso环境中如何搭建测试电路、测量关键温度系数、计算并搭建核心电路,并通过参数扫描和迭代调优来驯服温度漂移,最终实现低漂移的基准电压输出。

weixin_29207533的博客 243

vue 请求服务器端API接口

import axios from 'axios' import router from '@/router' axios.defaults.timeout = 3000 axios.defaults.baseURL = '' axios.interceptors.request.use( config => { // const token = getCookie('名...

xudejun的博客 3718

运动想象 (MI) 分类学习系列 (19) : EEG-TransNet

本文提出了一种基于注意力机制的卷积神经网络(EEG-TransNet),用于运动想象脑电图(MI-EEG)解码。该方法创新性地通过平均池化和方差池化提取多模态时间信息,并结合自注意力模块捕获长期依赖关系。消融实验表明,方差池化比最大池化更有效(p<0.05),且注意力模块和卷积编码器对特征判别性至关重要。可视化分析验证了该方法能学习到更具判别性的紧凑特征。该工作为MI-EEG解码提供了新的多尺度时间信息融合视角,代码已开源。

走在深度学习前沿的小宋 358

vue——封装请求后token未刷新问题

vue——封装请求后token未刷新问题 接手项目二期,登录是将token存本地后,封装请求后拿不到最新的token,一直显示为null,查阅了一会儿发现,封装请求的时候只做了响应拦截,没做请求拦截,加上后即解决了该问题. const service = axios.create({ baseURL, timeout: 30000, }); service.interceptors.request.use( (config) => { let token = localStorag

m0_47524246的博客 500

总结一下:电源设计 ≠ 画个电路图就完了

如果你面对一块电源板时,只知道输入输出是多少伏,那你离真正懂它还差十万八千里。你要懂拓扑、理解工作原理、看懂波形、会分析环路、熟练选型,还得懂调试、EMC和热设计——才能自信地说:“我会搞电源了。电源不是一个人能独挑的“电”,而是控制、模拟、热、EMC 多学科交融的“多面体”。这也是为什么它既复杂又迷人✨。

weixin_43199439的博客 144

C/C++李峋同款跳动的爱心代码(完整代码)

C++语言实现出李峋同款跳动的爱心的完整代码。

AIGC 10万+

vuex之刷新页面时token丢失问题

前端项目,使用vuex作为状态存储,但是遇到一个问题,就是在刷新页面时出现了丢失token的问题,下面给出完美的解答: 1.可以使用缓存将vuex中的state缓存起来,可以使用localStorage和sessionStorage。cookie不适合存储。 localStorage是长期存储,sessionStorage是会话期间存储,这里使用sessionStorage. 在这里插入图片描述 2.上代码 App.vue中添加 mounted()和methods,在刷新的时候进行持久化。 <te

weixin_42965737的博客 5681

【人工智能】Gemini怎么使用智能体的能力? Gemini Gems: 定制你的AI智能体

Gems 是 Gemini 的定制版本。你可以通过设定特定的指令(Instructions),让它变成你需要的专家。一旦创建,它会记住这些设定,你不需要在每次对话时重复输入背景信息。目前创建和使用自定义 Gems 通常需要订阅(Google One AI Premium 计划)。对于大多数用户来说,Gemini Advanced 中的 Gems是使用智能体能力的最直接方式。它能让你把重复性的提示词封装成一个好用的工具。

奶爸的编程之路,也就一周冷个三天 781

Vue项目中基于token的登录流程详解,Vuex中刷新数据丢失问题

Vue项目中基于token的登录流程详解,Vuex中刷新数据丢失问题

qq_56989560的博客 1581

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

vue----sessionStorage保存用户登录数据,解决vuex在页面刷新之后状态丢失问题

需求说明: 在之前写的文章中,vue---将登录成功后后台返回的参数token,id等保存在store中,供其他组件调用存在问题:当页面刷新后, vuex中的数据被初始化,导致vuex的state丢失。那么如何防止页面刷新后state丢失呢? 解决方案: 借助sessionStorage或loacalStorage, ...

maidu_xbd的博客 5761

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

前端登录业务中刷新页面导致VueX中存储的Token丢失问题

在实现用户登录注册的业务时,通过ajax请求将用户注册的用户名和密码发送给服务器(可以将数据放入请求头中),服务器返回一个账号专属Token,将Token存储在总store中,然而刷新页面将导致store中的Token值丢失,变为初始值,即为空串,导致后续一系列需要用到判断Token是否存在的行为丢失。 ​ 问题原因: 表面原因是因为token没有携带给服务器,无法将携带Token的ajax请求发送,导致页面无法渲染服务器返回的数据,更深层次的原因为Vuex存储数据并非持久化的,store里的数据是保存在

mwj020130的博客 3962

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

vuex刷新页面丢失登录的token信息的解决方案

最近真的是和这个token给干上了,被这个token验证搞的非常无语了抓狂了一整天,还是解决了,貌似解决了,记录一下。

黄钢的博客 3万+

保存token到vuex中以及处理token持久化问题

保存token到vuex中以及处理token持久化问题

YasWestmere的博客 1824

Vue实现登录功能详解,前期配置(整合)(处理token,vuex配置,axios配置,router配置等)

Vue实现登录功能详解,前期配置。后端收到请求,验证用户名和密码,验证成功,就给前端返回一个token;前端拿到token,将token存储到localStorage和vuex中,并跳转路由页面后端判断请求头中有无token,有token,就拿到token并验证token,验证成功就返回数据,验证失败

m0_61663332的博客 7179

vue文件上传-如何上传?及刷新token丢失问题

​ 一、vue文件上传 我们采用的方法是使用element组件实现文件上传: 可参考官网:Element - The world's most popular Vue UI framework 1. 点击上传,参考代码如下: 3. 一些常用属性: action,必选参数,上传的地址。 headers,设置上传的请求头部。 multiple,是否支持多选文件,类型boolean。 show-file-list,是否显示已上传文件列表,类型boolean。 drag,是否启用拖拽上传,类型b ​

coinisi_li的博客 2068

解决刷新页面vuex store中数据丢失的问题

**问题背景:**页面刷新后,vuex中的数据丢失。这是因为:js代码是运行在内存中的,代码运行时的所有变量、函数也都是保存在内存中的。进行刷新页面的操作,以前申请的内存被释放,重新加载脚本代码,变量重新赋值,所以这些数据要想存储就必须存储在外部,例如:Local Storage、Session Storage、Index DB等。这些都是浏览器提供的API,让你可以将数据存储在硬盘上,做持久化...

kerelee_li的博客 1万+

vue项目身份认证,vuex,token

例如我当前访问⼴告管理/advert,这时我想访问⽤户管理/user,但因为⻓时间没操作,登录状态过期了(⼿动请求 store 模拟),就会⾃动跳回/login,当我再次登录后,默认会跳转到/⾸⻚。之所以出现“用户信息消失”,但是页面仍停留在“首页”,因为后台页面不需要去服务端鉴权,只是在客户端本地验证Vuex中的数据,但是在本地Vuex是无法验证token是否过期。Token用于进行接口鉴权,但Token具有后端设置的过期时间,当Token过期后,就无法再请求接口数据了。a. 成功时,访问组件。

m0_49515138的博客 2557

vue 基于vuex 请求令牌token 刷新令牌token验证

store.js import Vue from "vue" import Vuex from "vuex" /** Vuex持久化存储之vuex-persist Vuex 解决了多视图之间的数据共享问题。但是运用过程中又带来了一个新的问题是, Vuex 的状态存储并不能持久化。也就是说当你存储在 Vuex 中的 store 里的数据, 只要一刷新页面,数据就丢...

qq_32421489的博客 1517

Vuex页面刷新的数据丢失问题

在实际项目中,经常会遇到多个组件需要访问同一个数据的情况,且都需要根据数据的变化作出响应,而这些组件之间可能并不是父子组件这种简单的关系。在这种情况下就需要一个全局的状态管理方案-Vuex。Vuex是一个专门为Vue.js应用程序开发的状态管理模式。它采用集中式存储来管理应用程序中所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

冲出仁川,走出马德里,故事还会再继续 539

vuex数据刷新后丢失问题解决办法

在实际的vue项目中,当我们的应用遇到多个组件之间的共享问题时,通常会用到Vuex(一个状态管理的插件,可以解决不同组件之间的数据共享和数据持久化),解决组件之间同一状态的共享问题。 因子: Vuex优势:相比sessionStorage,存储数据更安全,sessionStorage可以在控制台被看到。 Vuex劣势:在刷新页面后,vuex会重新更新state,所以,存储的数据会...

qq_39038793的博客 387

用vuex对token/refresh_token 进行管理以及处理token过期问题

就是用户在进入白名单页面时,比如说首页或者其他不需要个人信息页面时,是不需要登录的,如果在没有登录的情况下,想要进入类似于个人中心,会员中心这种页面时,那么就需要让用户去登录页面登录一下,登录完成之后再返回刚刚要去的个人中心页面,这时候就是在路由跳转的时候,带上刚刚页面的路由路径,可以在登录完成之后原路返回。非但必须有个过期时间,而且过期时间还不能太长,那么重新获取有两种方式,一是重复第一次获取token的过程(比如登录,扫描授权等) ,这样做的缺点是用户体验不好,每一小时强制登录一次几乎是无法忍受的。

m0_49515138的博客 3780
上一篇: echarts双向柱状图
下一篇: VUE element ui tree树形控件修改功能
言只  石皮
博客等级 码龄7年 21粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言只 石皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值