From ac3f01a11d846247beb2512df2e447945b285086 Mon Sep 17 00:00:00 2001 From: ivamp Date: Sat, 3 Aug 2024 01:48:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B=20=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/stores/user.ts | 50 ++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/src/stores/user.ts b/src/stores/user.ts index 83d1beb..8446567 100644 --- a/src/stores/user.ts +++ b/src/stores/user.ts @@ -1,6 +1,9 @@ import { defineStore } from "pinia"; import { useConfigStore } from "@/stores/config"; import axios from "axios"; + +let timer: any = null; + export const useUserStore = defineStore("user", { persist: true, state: () => ({ @@ -39,20 +42,18 @@ export const useUserStore = defineStore("user", { this.logined = true; }, setupTimer() { - // 如果有 timer - if (this.timer) { - return; - } - - this.timer = setInterval(() => { + timer = setInterval(() => { if (this.logined) { if (this.expired_at - Date.now() < 60000) { this.refresh(); + } else { + // 显示还有多长时间过期 + console.log( + "Token will expire in " + + (this.expired_at - Date.now()) / 1000 + + " seconds" + ); } - // else { - // // 显示还有多长时间过期 - // // console.log("Token will expire in " + (this.expired_at - Date.now()) / 1000 + " seconds"); - // } } }, 10 * 1000); }, @@ -69,15 +70,26 @@ export const useUserStore = defineStore("user", { data.set("client_id", configStore.oauth_client_id); data.set("scope", configStore.oauth_scope); - // axios - let refresh = await axios.post(discovery.data.token_endpoint, data); - - this.login( - refresh.data.id_token, - refresh.data.access_token, - refresh.data.refresh_token, - refresh.data.expires_in - ); + axios + .post(discovery.data.token_endpoint, data) + .then((response) => { + this.login( + response.data.id_token, + response.data.access_token, + response.data.refresh_token, + response.data.expires_in + ); + }) + .catch((error) => { + // if 401 + if (error.response.status == 401) { + console.log("Refresh token failed"); + } + // logout + this.logout(); + clearInterval(timer); + return; + }); }, logout() { this.user = {