From 6c6396bb3d4e6a28703ba8027974a7a67aa0842d Mon Sep 17 00:00:00 2001 From: yangzhe Date: Fri, 31 Oct 2025 14:04:01 +0800 Subject: [PATCH] =?UTF-8?q?fix(auth):=20=E4=BF=AE=E5=A4=8D=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 恢复被注释的登录跳转逻辑 移除调试用的return语句 启用401未授权错误处理 修正教师登录后的跳转路径 统一代码格式和引号风格 --- App.vue | 2 - common/http.interceptor.js | 164 ++++++++++++++++++------------------ pages/login/login/index.vue | 27 +++--- static/common/js/router.js | 10 +-- 4 files changed, 97 insertions(+), 106 deletions(-) diff --git a/App.vue b/App.vue index a30b5dc..e5201c2 100644 --- a/App.vue +++ b/App.vue @@ -34,8 +34,6 @@ export default { } }, }); - // 先返回 - return if (!that.vuex_token) { const type = that.vuex_userType || 0; // 0:学生 1:教师 diff --git a/common/http.interceptor.js b/common/http.interceptor.js index f9ae4c2..8cf6961 100644 --- a/common/http.interceptor.js +++ b/common/http.interceptor.js @@ -1,99 +1,97 @@ // 这里的vm,就是我们在vue文件里面的this,所以我们能在这里获取vuex的变量,比如存放在里面的token // 同时,我们也可以在此使用getApp().globalData,如果你把token放在getApp().globalData的话,也是可以使用的 const install = (Vue, vm) => { - Vue.prototype.$u.http.setConfig({ - // baseUrl: 'https://xy.apps.service.zheke.com', - // imgUrl: 'https://xy.apps.service.zheke.com/', - baseUrl: 'http://120.55.234.65:8082', - imgUrl: 'http://120.55.234.65:8082/', - // imgUrl:'http://115.238.47.235:8987/', - // baseUrl: 'http://115.238.47.235:8993', - // 如果将此值设置为true,拦截回调中将会返回服务端返回的所有数据response,而不是response.data - // 设置为true后,就需要在this.$u.http.interceptor.response进行多一次的判断,请打印查看具体值 - originalData: true, - // 设置自定义头部content-type - // header: { - // 'content-type': 'xxx' - // } - }); - // 请求拦截,配置Token等参数 - Vue.prototype.$u.http.interceptor.request = (config) => { + Vue.prototype.$u.http.setConfig({ + // baseUrl: 'https://xy.apps.service.zheke.com', + // imgUrl: 'https://xy.apps.service.zheke.com/', + baseUrl: "http://120.55.234.65:8082", + imgUrl: "http://120.55.234.65:8082/", + // imgUrl:'http://115.238.47.235:8987/', + // baseUrl: 'http://115.238.47.235:8993', + // 如果将此值设置为true,拦截回调中将会返回服务端返回的所有数据response,而不是response.data + // 设置为true后,就需要在this.$u.http.interceptor.response进行多一次的判断,请打印查看具体值 + originalData: true, + // 设置自定义头部content-type + // header: { + // 'content-type': 'xxx' + // } + }); + // 请求拦截,配置Token等参数 + Vue.prototype.$u.http.interceptor.request = (config) => { + // config.header.Token = 'xxxxxx'; + // 方式一,存放在vuex的token,假设 ,见:https://uviewui.com/components/globalVariable.html + config.header.Authorization = "Bearer " + vm.vuex_token; + // 方式二,如果没有使用uView封装的vuex方法,那么需要使用$store.state获取 + // config.header.token = vm.$store.state.token; - // config.header.Token = 'xxxxxx'; - // 方式一,存放在vuex的token,假设 ,见:https://uviewui.com/components/globalVariable.html - config.header.Authorization = 'Bearer ' + vm.vuex_token; - // 方式二,如果没有使用uView封装的vuex方法,那么需要使用$store.state获取 - // config.header.token = vm.$store.state.token; + // 方式三,如果token放在了globalData,通过getApp().globalData获取 + // config.header.token = getApp().globalData.username; - // 方式三,如果token放在了globalData,通过getApp().globalData获取 - // config.header.token = getApp().globalData.username; + // 方式四,如果token放在了Storage本地存储中,拦截是每次请求都执行的,所以哪怕您重新登录修改了Storage,下一次的请求将会是最新值 + // const token = uni.getStorageSync('token'); + // config.header.token = token; - // 方式四,如果token放在了Storage本地存储中,拦截是每次请求都执行的,所以哪怕您重新登录修改了Storage,下一次的请求将会是最新值 - // const token = uni.getStorageSync('token'); - // config.header.token = token; - - // 注释 7/15 - // uni.showLoading({ - // title: '请求中...' - // }); - // 注释 + // 注释 7/15 + // uni.showLoading({ + // title: '请求中...' + // }); + // 注释 - // setTimeout(function () { - // uni.hideLoading(); - // }, 2000); + // setTimeout(function () { + // uni.hideLoading(); + // }, 2000); - return config; - } - // 响应拦截,判断状态码是否通过 - Vue.prototype.$u.http.interceptor.response = (res) => { - // uni.hideLoading(); + return config; + }; + // 响应拦截,判断状态码是否通过 + Vue.prototype.$u.http.interceptor.response = (res) => { + // uni.hideLoading(); - // 先注释 - // 检查是否为401未授权错误 - // if (res.statusCode === 401) { - // handleAuthError(vm); - // return false; - // } - - return res.data; + // 检查是否为401未授权错误 + if (res.statusCode === 401) { + handleAuthError(vm); + return false; + } - if (res.succeed == true || res.success == true) { - // return res.data || res; - return res; - } else { - // uni.showToast({ - // title: res.error, - // duration: 2000, - // icon: 'none' - // }); - // uni.navigateTo({ - // url: "/pages/login/login/login", - // }); - - return false; - } - } -} + return res.data; + + if (res.succeed == true || res.success == true) { + // return res.data || res; + return res; + } else { + // uni.showToast({ + // title: res.error, + // duration: 2000, + // icon: 'none' + // }); + // uni.navigateTo({ + // url: "/pages/login/login/login", + // }); + + return false; + } + }; +}; // 提取处理401错误的函数 function handleAuthError(vm) { - vm.$u.vuex("vuex_user", ""); - vm.$u.vuex("vuex_token", ""); - uni.clearStorage(); - - // 显示提示 - uni.showToast({ - title: '登录已过期,请重新登录!', - icon: 'none', - duration: 1500 - }); - - // 延迟跳转到登录页 - uni.reLaunch({ - url: '/pages/login/login/index' - }); + vm.$u.vuex("vuex_user", ""); + vm.$u.vuex("vuex_token", ""); + uni.clearStorage(); + + // 显示提示 + uni.showToast({ + title: "登录已过期,请重新登录!", + icon: "none", + duration: 1500, + }); + + // 延迟跳转到登录页 + uni.reLaunch({ + url: "/pages/login/login/index", + }); } export default { - install -} + install, +}; diff --git a/pages/login/login/index.vue b/pages/login/login/index.vue index bfbbe85..885388c 100644 --- a/pages/login/login/index.vue +++ b/pages/login/login/index.vue @@ -357,9 +357,6 @@ export default { // 登录 login() { - console.log("登录..."); - - return; // const res = { // data: { // // token: @@ -369,18 +366,18 @@ export default { // }, // }; - const token = res.data.token; - // 解析获取用户信息 - const userInfo = getUserInfoFromJWT(token); - // 保存登录后得到的用户数据 - this.$u.vuex("vuex_token", token); - this.$u.vuex("vuex_user", userInfo); + // const token = res.data.token; + // // 解析获取用户信息 + // const userInfo = getUserInfoFromJWT(token); + // // 保存登录后得到的用户数据 + // this.$u.vuex("vuex_token", token); + // this.$u.vuex("vuex_user", userInfo); - // 跳转至首页 - uni.reLaunch({ - url: "/pages/home/index/index", - }); - return; + // // 跳转至首页 + // uni.reLaunch({ + // url: "/pages/home/index/index", + // }); + // return; // 校验手机号 if (!this.validatePhone()) { @@ -447,7 +444,7 @@ export default { // 跳转至首页 const url = this.isTeacher - ? "/pages/notes/index" + ? "/pages/consultation/index" : "/pages/home/index/index"; uni.reLaunch({ url: url, diff --git a/static/common/js/router.js b/static/common/js/router.js index e5bdfee..1bf76ce 100644 --- a/static/common/js/router.js +++ b/static/common/js/router.js @@ -33,12 +33,10 @@ const initApp = function (vm) { // url: config.loginPage // }) - // 先注释 - // uni.navigateTo({ - // url: "/pages/login/login/index", - // }); - // return false; - return e; + uni.navigateTo({ + url: "/pages/login/login/index", + }); + return false; } else { return e; }