From 0ace9a1c0e413a6678e7154d46529afca02978b0 Mon Sep 17 00:00:00 2001 From: sakuya <81883387@qq.com> Date: Tue, 24 May 2022 00:42:41 +0800 Subject: [PATCH] =?UTF-8?q?TOKEN=20=E4=BB=8ElocalStorage=E7=A7=BB=E8=87=B3?= =?UTF-8?q?cookie?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/index.js | 2 +- src/utils/request.js | 2 +- src/utils/tool.js | 82 +++++++++++++++++++++++----------- src/views/userCenter/login.vue | 4 +- 4 files changed, 61 insertions(+), 29 deletions(-) diff --git a/src/router/index.js b/src/router/index.js index baf18e95..b9126f09 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -36,7 +36,7 @@ router.beforeEach(async (to, from, next) => { //动态标题 document.title = to.meta.title ? `${to.meta.title} - ${config.APP_NAME}` : `${config.APP_NAME}` - let token = tool.data.get("TOKEN"); + let token = tool.cookie.get("TOKEN"); if(to.path === "/login"){ //删除路由(替换当前layout路由) diff --git a/src/utils/request.js b/src/utils/request.js index 70c9db1d..92ae8eee 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -11,7 +11,7 @@ axios.defaults.timeout = sysConfig.TIMEOUT // HTTP request 拦截器 axios.interceptors.request.use( (config) => { - let token = tool.data.get("TOKEN"); + let token = tool.cookie.get("TOKEN"); if(token){ config.headers[sysConfig.TOKEN_NAME] = sysConfig.TOKEN_PREFIX + token } diff --git a/src/utils/tool.js b/src/utils/tool.js index fb8f5225..fadb9d67 100644 --- a/src/utils/tool.js +++ b/src/utils/tool.js @@ -1,8 +1,8 @@ /* * @Descripttion: 工具集 - * @version: 1.1 + * @version: 1.2 * @LastEditors: sakuya - * @LastEditTime: 2021年7月20日10:58:41 + * @LastEditTime: 2022年5月24日00:28:56 */ import CryptoJS from 'crypto-js'; @@ -11,44 +11,34 @@ const tool = {} /* localStorage */ tool.data = { - /** - * 设置缓存 - * @param {*} key - * @param {*} data - * @param {*} time 过期时间 单位秒 (默认:0 不过期) - * @returns - */ - set(key, data, time = 0) { - let cacheVal = { - val: data, - time: parseInt(time) === 0 ? 0 : parseInt(time) * 1000 + new Date().getTime() - }; - return localStorage.setItem(key, JSON.stringify(cacheVal)); + set(key, data, datetime = 0) { + let cacheValue = { + content: data, + datetime: parseInt(datetime) === 0 ? 0 : new Date().getTime() + parseInt(datetime) * 1000 + } + return localStorage.setItem(key, JSON.stringify(cacheValue)) }, get(key) { try { - const value = JSON.parse(localStorage.getItem(key)) + const value = JSON.parse(localStorage.getItem(key)) if (value) { - let now = new Date().getTime(); - if (now > value.time && value.time != 0) {//缓存过期 + let nowTime = new Date().getTime() + if (nowTime > value.datetime && value.datetime != 0) { localStorage.removeItem(key) return null; } - return value.val + return value.content } return null - } catch (e) { + } catch (err) { return null } }, - del (key) { - return localStorage.removeItem(key); - }, - remove(table) { - return localStorage.removeItem(table); + remove(key) { + return localStorage.removeItem(key) }, clear() { - return localStorage.clear(); + return localStorage.clear() } } @@ -75,6 +65,46 @@ tool.session = { } } +/*cookie*/ +tool.cookie = { + set(name, value, config={}) { + var cfg = { + expires: null, + path: null, + domain: null, + secure: false, + httpOnly: false, + ...config + } + var cookieStr = `${name}=${escape(value)}` + if(cfg.expires){ + var exp = new Date() + exp.setTime(exp.getTime() + parseInt(cfg.expires) * 1000) + cookieStr += `;expires=${exp.toGMTString()}` + } + if(cfg.path){ + cookieStr += `;path=${cfg.path}` + } + if(cfg.domain){ + cookieStr += `;domain=${cfg.domain}` + } + document.cookie = cookieStr + }, + get(name){ + var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)")) + if(arr != null){ + return unescape(arr[2]) + }else{ + return null + } + }, + remove(name){ + var exp = new Date() + exp.setTime(exp.getTime() - 1) + document.cookie = `${name}=;expires=${exp.toGMTString()}` + } +} + /* Fullscreen */ tool.screen = function (element) { var isFull = !!(document.webkitIsFullScreen || document.mozFullScreen || document.msFullscreenElement || document.fullscreenElement); diff --git a/src/views/userCenter/login.vue b/src/views/userCenter/login.vue index 1df089ec..3c911dad 100644 --- a/src/views/userCenter/login.vue +++ b/src/views/userCenter/login.vue @@ -169,7 +169,9 @@ //获取token var user = await this.$API.auth.token.post(data) if(user.code == 200){ - this.$TOOL.data.set("TOKEN", user.data.token) + this.$TOOL.cookie.set("TOKEN", user.data.token, { + expires: this.ruleForm.autologin? 24*60*60 : 0 + }) this.$TOOL.data.set("USER_INFO", user.data.userInfo) }else{ this.islogin = false