From 0fded66d7e8681a063825088149964f55fc29cd1 Mon Sep 17 00:00:00 2001 From: "iVampireSP.com" Date: Wed, 6 Dec 2023 09:10:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B=20=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/user.ts | 113 ++++++++++++++++++++++++---------------------- 1 file changed, 59 insertions(+), 54 deletions(-) diff --git a/src/store/user.ts b/src/store/user.ts index 4eef65e..0d84c63 100644 --- a/src/store/user.ts +++ b/src/store/user.ts @@ -1,63 +1,68 @@ -import {defineStore} from 'pinia' +import { defineStore } from "pinia"; import axios from "axios"; -import {useConfigStore} from "./config"; +import { useConfigStore } from "./config"; -const useUserStore = defineStore('user', { - persist: true, - state: () => ({ - refresh_token: null as null | string, - jwt_token: null as null | string, - expired_at: null as null | Date, - }), - getters: { - isLoggedIn(): boolean { - return this.jwt_token !== null - } +const useUserStore = defineStore("user", { + persist: true, + state: () => ({ + refresh_token: null as null | string, + jwt_token: null as null | string, + expired_at: null as null | Date, + }), + getters: { + isLoggedIn(): boolean { + return this.jwt_token !== null; }, - actions: { - login(refresh_token: string, jwt_token: string) { - this.refresh_token = refresh_token - this.jwt_token = jwt_token - }, - setExpired(expires_in: number) { - // get date(current + seconds) - this.expired_at = new Date(Date.now() + expires_in * 1000) - }, - logout() { - console.log("logout") - this.refresh_token = null - this.jwt_token = null - }, - refresh() { - let config = useConfigStore() + }, + actions: { + login(refresh_token: string, jwt_token: string) { + this.refresh_token = refresh_token; + this.jwt_token = jwt_token; + }, + setExpired(expires_in: number) { + // get date(current + seconds) + this.expired_at = new Date(Date.now() + expires_in * 1000); + }, + logout() { + console.log("logout"); + this.refresh_token = null; + this.jwt_token = null; + }, + refresh() { + let config = useConfigStore(); - axios.post(config.getRefreshUrl(), { - refresh_token: this.refresh_token - }).then(r => { - this.jwt_token = r.data.token - }).catch(e => { - console.error(e) - this.logout() - }) - }, - get_token() { - return this.jwt_token - } - } -}) + axios + .post(config.getRefreshUrl(), { + refresh_token: this.refresh_token, + }) + .then((r) => { + this.jwt_token = r.data.token; + this.setExpired(r.data.expires_in); + }) + .catch((e) => { + console.error(e); + this.logout(); + }); + }, + get_token() { + return this.jwt_token; + }, + }, +}); setInterval(() => { - // check expired - const currentDate = new Date() + // check expired + const currentDate = new Date(); - const userStore = useUserStore() + const userStore = useUserStore(); + const expiredAt = new Date(userStore.expired_at || 0); - + // if has expired + if (userStore.expired_at !== null && expiredAt < currentDate) { + if (userStore.jwt_token !== null && userStore.refresh_token !== null) { + userStore.refresh(); + } + } +}, 1000); - - -}) - -export { - useUserStore -} \ No newline at end of file +export { useUserStore };