blue 1 年間 前
コミット
e4d3cad822
3 ファイル変更29 行追加19 行削除
  1. 21 7
      im-uniapp/App.vue
  2. 3 1
      im-uniapp/common/request.js
  3. 5 11
      im-uniapp/pages/login/login.vue

+ 21 - 7
im-uniapp/App.vue

@@ -243,18 +243,32 @@
 				// this.audioTip = uni.createInnerAudioContext();
 				// this.audioTip.src =  "/static/audio/tip.wav";
 				// this.audioTip.play();
-			}
+			},
+			isExpired(loginInfo){
+				if(!loginInfo || !loginInfo.expireTime){
+					return true;
+				}
+				return loginInfo.expireTime < new Date().getTime();
+			},
 		},
 		onLaunch() {
 			// 登录状态校验
-			if (uni.getStorageSync("loginInfo")) {
+			let loginInfo = uni.getStorageSync("loginInfo")
+			if (!this.isExpired(loginInfo)) {
+				console.log("初始化")
 				// 初始化
-				this.init()
-			} else {
-				// 跳转到登录页
-				uni.navigateTo({
-					url: "/pages/login/login"
+				this.init();
+				// 跳转到聊天页面
+				uni.switchTab({
+					url: "/pages/chat/chat"
 				})
+			} else{
+				// 跳转到登录页
+				// #ifdef H5
+					uni.navigateTo({
+						url: "/pages/login/login"
+					})
+				// #endif
 			}
 		}
 	}

+ 3 - 1
im-uniapp/common/request.js

@@ -41,7 +41,9 @@ const request = (options) => {
 						getApp().exit();
 						return;
 					}
-					uni.setStorageSync("loginInfo", res.data.data);
+					let newInfo = res.data.data;
+					newInfo.expireTime = new Date().getTime() + newInfo.refreshTokenExpiresIn*1000;
+					uni.setStorageSync("loginInfo", newInfo);
 					requestList.forEach(cb => cb());
 					requestList = [];
 					isRefreshToken = false;

+ 5 - 11
im-uniapp/pages/login/login.vue

@@ -3,7 +3,7 @@
 		<view class="login-title">欢迎登录</view>
 		<uni-forms style="margin-top: 100px;" :modelValue="loginForm" :rules="rules" validate-trigger="bind">
 			<uni-forms-item name="userName">
-				<uni-easyinput type="text" v-model="loginForm.userName" prefix-icon="person" focus placeholder="用户名" />
+				<uni-easyinput type="text" v-model="loginForm.userName" prefix-icon="person"  placeholder="用户名" />
 			</uni-forms-item>
 			<uni-forms-item name="password">
 				<uni-easyinput type="password" v-model="loginForm.password" prefix-icon="locked" placeholder="密码" />
@@ -45,11 +45,12 @@
 					url: '/login',
 					data: this.loginForm,
 					method: 'POST'
-				}).then(data => {
+				}).then(loginInfo => {
 					console.log("登录成功,自动跳转到聊天页面...")
 					uni.setStorageSync("userName", this.loginForm.userName);
 					uni.setStorageSync("password", this.loginForm.password);
-					uni.setStorageSync("loginInfo", data);
+					loginInfo.expireTime = new Date().getTime() + loginInfo.refreshTokenExpiresIn*1000;
+					uni.setStorageSync("loginInfo", loginInfo);
 					// 调用App.vue的初始化方法
 					getApp().init()
 					// 跳转到聊天页面   
@@ -59,17 +60,10 @@
 				})
 			}
 		},
+		
 		onLoad() {
 			this.loginForm.userName = uni.getStorageSync("userName");
 			this.loginForm.password = uni.getStorageSync("password");
-			let loginInfo = uni.getStorageSync("loginInfo");
-			if (loginInfo) {
-				// 跳转到聊天页面
-				uni.switchTab({
-					url: "/pages/chat/chat"
-				})
-				
-			}
 		}
 	}
 </script>