当前位置: 首页 > Web前端 > vue.js

Vue使用localStorage存储token并设置时效性

时间:2023-04-01 00:47:50 vue.js

相信大家平时的业务逻辑都是登录后保存token,之前的项目大多使用cookie。在这个项目中,我使用了vue-cookies来保存令牌。保存token是没有问题的,但是我需要在main.js中写一个全局方法需要获取cookie中的token。这时候发现不管是用vue-cookies方法还是js原生方法获取cookie,都无法百度获取。很多方法都没有实现,所以我决定使用localStorage。LocalStorage是没有设置时间限制的,所以需要自己写一个方法设置时间限制的代码。参考https://blog.csdn.net/yunchon...首先创建一个js文件把打包好的方法storage.jsletmyStorage=(function(){functionsetItem(params){//存储在localStorage方法中//storedparameterconstobj={name:"",//存储名称value:"",//存储值expires:"",//过期时间startTime:newDate().getTime()//存入时间}constoptions={};//结合obj并传入params到options中,实现js中的浅拷贝Object.assign(options,obj,params);//判断用户是否设置过期时间if(options.expires){//options.name为key,options为valuelocalStorage.setItem(options.name,JSON.stringify(options));}else{//如果没有设置options.expires,则判断value的类型//笔记注意我们的localStorage只能存储数组之类的字符串和需要转换的对象lettype=Object.prototype.toString.call(options.value);if(type=='[objectObject]'||type=='[objectArray]'){options.value=JSON.stringify(options.value);}localStorage.setItem(options.name,options.value);}}//获取值functiongetItem(name){letitem=localStorage.getItem(name);//判断item是否存在if(item){//首先检查获取到的对象是否可以转换为object对象格式,如果不存在则说明不是json字符串形式try{item=JSON.parse(项目);}catch(错误){item=item;}//如果有expires值,说明设置了过期时间if(item.expires){//获取当前时间letnow=newDate().getTime();//存储的时间减去当前时间,与过期时间比较//如果大于则表示已经过期如果存储小于等于则不会过期if(now-item.startTime>item.expires){localStorage.removeItem(名称);返回假;//返回一个状态值}else{//缓存没有过期,返回值returnitem.value;}}else{//不设置过期时间,直接返回值returnitem;}}else{返回错误;//如果item值为undefined,表示没有存储,返回false}}//移除指定缓存functionremoveItem(name){localStorage.removeItem(name);}//删除所有存储的数据functionclear(){localStorage.clear();}return{//返回执行接口setItem,getItem,removeItem,clear}})();导出默认myStorage;//暴露方法的核心代码是这些,然后从'yourpath/storage.js'导入这个jsimportsetStorage然后你可以使用setStorage.setItem({value:yourtoken,name:'token',expires:604800000})//storagetoken过期时间是毫秒这里是一周setStorage.getItem('token')//获取token