From 4aa76ff1ad213f20409a49bca026fd43eb50d851 Mon Sep 17 00:00:00 2001
From: xuesinan <1404152492@qq.com>
Date: Tue, 18 Jan 2022 16:27:26 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BC=95=E5=AF=BC=E9=A1=B5=E3=80=81?=
=?UTF-8?q?=E5=B9=BF=E5=91=8A=E9=A1=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
CHANGELOG.md | 3 ++-
pages.json | 16 ++++++++++++++-
pages/guide/guide.vue | 33 +++++++++++++++++++++++++++++++
pages/init/init.vue | 23 ++++++++++++++++++++++
store/index.js | 11 +++++++++++
utils/request.js | 46 +++++++++++++++++++++++++------------------
6 files changed, 111 insertions(+), 21 deletions(-)
create mode 100644 pages/guide/guide.vue
create mode 100644 pages/init/init.vue
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8eb512f..99cd62c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,4 @@
-# 1.0.0 (2022-01-17)
+# 1.0.0 (2022-01-18)
### 🌟 新功能
范围|描述|commitId
@@ -33,6 +33,7 @@
- | first commit | [8dc26de](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/8dc26de)
project | 日常任务面板添加 | [b3f16ff](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/b3f16ff)
theme | theme demo | [9175758](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/9175758)
+ - | token过期策略 | [8f16ae1](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/8f16ae1)
- | vue3 | [12ed2ad](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/12ed2ad)
diff --git a/pages.json b/pages.json
index 6671771..4ac5f14 100644
--- a/pages.json
+++ b/pages.json
@@ -1,5 +1,19 @@
{
- "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+ "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+ {
+ "path": "pages/init/init",
+ "style": {
+ "navigationBarText": "TALL",
+ "navigationStyle": "custom"
+ }
+ },
+ {
+ "path": "pages/guide/guide",
+ "style": {
+ "navigationBarText": "TALL",
+ "navigationStyle": "custom"
+ }
+ },
{
"path": "pages/index/index",
"style": {
diff --git a/pages/guide/guide.vue b/pages/guide/guide.vue
new file mode 100644
index 0000000..5911136
--- /dev/null
+++ b/pages/guide/guide.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+ A
+
+
+
+ B
+
+
+ C
+
+
+
+
+
+
+
diff --git a/pages/init/init.vue b/pages/init/init.vue
new file mode 100644
index 0000000..297d0b8
--- /dev/null
+++ b/pages/init/init.vue
@@ -0,0 +1,23 @@
+
+ 启动页
+
+
+
+
+
diff --git a/store/index.js b/store/index.js
index c20d379..fa6e0ca 100644
--- a/store/index.js
+++ b/store/index.js
@@ -11,6 +11,7 @@ const state = {
networkConnected: true, // 网络是否连接
forceUseStorage: true, // 强制启用storage
systemInfo: null, // 系统设备信息
+ count: 2, // 后台出错,多次返回错误的token信息导致的死循环,用count来阻止死循环
};
const getters = {
@@ -48,6 +49,16 @@ const mutations = {
setTheme(state, theme) {
state.theme = theme || 'theme-default';
},
+
+ /**
+ * 设置count
+ * 后台出错,多次返回错误的token信息导致的死循环,用count来阻止死循环
+ * @param {Object} state
+ * @param {Object} data
+ */
+ setCount(state, data) {
+ state.count = data;
+ },
};
export default createStore({
diff --git a/utils/request.js b/utils/request.js
index 7606bcc..970403c 100644
--- a/utils/request.js
+++ b/utils/request.js
@@ -16,28 +16,32 @@ export function setupHttp(app) {
});
// 请求拦截部分,如配置,每次请求前都会执行
- app.config.globalProperties.$u.http.interceptor.request = config => {
+ app.config.globalProperties.$u.http.interceptor.request = config => {
+ if (store.state.count === 0) {
+ return false;
+ }
+
const token = store.state.user.token || storage.getStorageSync('anyringToken');
if (token) {
config.header.Authorization = `Bearer ${token}`;
- }
-
- uni.getSystemInfo({
- success: function(res) {
- config.header.deviceId = res.deviceId;
- }
- })
-
+ }
+
+ config.header.deviceId = store.state.systemInfo.deviceId;
+ // #ifdef APP-PLUS
+ config.header.appType = 1;
+ // #endif
+ // #ifdef H5
+ config.header.appType = 0;
+ // #endif
return config;
};
// 响应拦截,如配置,每次请求结束都会执行本方法
- app.config.globalProperties.$u.http.interceptor.response = res => {
- if (res.code === 200) {
- // res为服务端返回值,可能有code,result等字段
- // 这里对res.result进行返回,将会在this.$u.post(url).then(res => {})的then回调中的res的到
- // 如果配置了originalData为true,请留意这里的返回值
-
+ app.config.globalProperties.$u.http.interceptor.response = async res => {
+ // res为服务端返回值,可能有code,result等字段
+ // 这里对res.result进行返回,将会在this.$u.post(url).then(res => {})的then回调中的res的到
+ // 如果配置了originalData为true,请留意这里的返回值
+ if (res.code === 200) {
if (res.tokenObj.token) {
storage.setStorageSync('anyringToken', res.tokenObj.token || '');
storage.setStorageSync('refreshToken', res.tokenObj.refreshToken || '');
@@ -49,16 +53,20 @@ export function setupHttp(app) {
ui.showToast(res.msg);
return false;
} else if (res.code === 49) { // token过期
+ store.commit('setCount', store.state.count - 1);
+
let refreshToken = storage.getStorageSync('refreshToken');
- store.dispatch('user/getTokenByRefreshToken', refreshToken);
+ await store.dispatch('user/getTokenByRefreshToken', refreshToken);
+
return false;
} else if (res.code === 401) { // refreshToken过期
// 假设201为token失效,这里跳转登录
// ui.showToast('验证失败,请重新登录');
ui.showToast(res.msg);
- // storage.setStorageSync('anyringToken', '');
- // storage.setStorageSync('refreshToken', '');
- // store.commit('user/setToken', ' ');
+
+ storage.setStorageSync('anyringToken', '');
+ storage.setStorageSync('refreshToken', '');
+ store.commit('user/setToken', ' ');
setTimeout(() => {
// 此为uView的方法,详见路由相关文档