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 = {