🐛 Refresh token won't implement

This commit is contained in:
2024-08-13 01:08:32 +08:00
parent 14f2bc0ee6
commit 542f81d9c2
5 changed files with 60 additions and 28 deletions

View File

@ -1,5 +1,6 @@
import { defineStore } from "pinia"
import { ref } from "vue"
import { solarFetch } from "~/utils/request"
export interface Userinfo {
isLoggedIn: boolean
@ -21,11 +22,6 @@ export function useRtk() {
return useCookie("__hydrogen_rtk", { watch: "shallow" })
}
export function setTokenSet(atk: string, rtk: string) {
useAtk().value = atk
useRtk().value = rtk
}
export function useLoggedInState() {
return computed(() => useAtk().value != null)
}
@ -34,6 +30,40 @@ export const useUserinfo = defineStore("userinfo", () => {
const userinfo = ref(defaultUserinfo)
const isReady = ref(false)
const lastRefreshedAt = ref<Date | null>(null)
function setTokenSet(atk: string, rtk: string) {
lastRefreshedAt.value = new Date()
useAtk().value = atk
useRtk().value = rtk
}
async function getAtk() {
if (lastRefreshedAt.value != null && Math.floor(Math.abs(Date.now() - lastRefreshedAt.value.getTime()) / 60000) < 3) {
return useAtk().value
}
const config = useRuntimeConfig()
const res = await fetch(`${config.public.solarNetworkApi}/cgi/auth/auth/token`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
refresh_token: useRtk().value,
grant_type: "refresh_token",
}),
})
if (res.status !== 200) {
const err = await res.text()
throw new Error(err)
} else {
const out = await res.json()
console.log("[PASSPORT] Access token has been refreshed now.")
setTokenSet(out["access_token"], out["refresh_token"])
return out["access_token"]
}
}
async function readProfiles() {
if (!useLoggedInState().value) {
isReady.value = true
@ -41,9 +71,7 @@ export const useUserinfo = defineStore("userinfo", () => {
const config = useRuntimeConfig()
const res = await fetch(`${config.public.solarNetworkApi}/cgi/auth/users/me`, {
headers: { Authorization: `Bearer ${useAtk().value}` },
})
const res = await solarFetch("/cgi/auth/users/me")
if (res.status !== 200) {
return
@ -59,5 +87,5 @@ export const useUserinfo = defineStore("userinfo", () => {
}
}
return { userinfo, isReady, readProfiles }
return { userinfo, lastRefreshedAt, isReady, setTokenSet, getAtk, readProfiles }
})