🐛 Fix refresh tk issue
This commit is contained in:
		| @@ -1,17 +1,23 @@ | |||||||
| <template> | <template> | ||||||
|   <v-dialog v-model="editor.show.comment" class="max-w-[540px]" eager> |   <v-bottom-sheet v-model="editor.show.comment" eager> | ||||||
|     <comment-editor /> |     <div class="h-[720px]"> | ||||||
|   </v-dialog> |       <comment-editor /> | ||||||
|   <v-dialog v-model="editor.show.moment" class="max-w-[540px]" eager> |     </div> | ||||||
|     <moment-editor /> |   </v-bottom-sheet> | ||||||
|   </v-dialog> |   <v-bottom-sheet v-model="editor.show.moment" eager> | ||||||
|   <v-dialog v-model="editor.show.article" transition="dialog-bottom-transition" fullscreen eager> |     <div class="h-[720px]"> | ||||||
|     <article-editor /> |       <moment-editor /> | ||||||
|   </v-dialog> |     </div> | ||||||
|  |   </v-bottom-sheet> | ||||||
|  |   <v-bottom-sheet v-model="editor.show.article" eager> | ||||||
|  |     <div class="h-[720px]"> | ||||||
|  |       <article-editor /> | ||||||
|  |     </div> | ||||||
|  |   </v-bottom-sheet> | ||||||
|  |  | ||||||
|   <v-dialog v-model="editor.show.delete" class="max-w-[540px]" eager> |   <v-bottom-sheet v-model="editor.show.delete" eager> | ||||||
|     <post-deletion /> |     <post-deletion /> | ||||||
|   </v-dialog> |   </v-bottom-sheet> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||||
|   | |||||||
| @@ -1,11 +1,46 @@ | |||||||
|  | import { getAtk, getRtk } from "@/stores/userinfo" | ||||||
|  | import { Preferences } from "@capacitor/preferences" | ||||||
|  |  | ||||||
| const serviceMap: { [id: string]: string } = { | const serviceMap: { [id: string]: string } = { | ||||||
|   interactive: "https://co.solsynth.dev", |   interactive: "https://co.solsynth.dev", | ||||||
|   identity: "https://id.solsynth.dev" |   identity: "https://id.solsynth.dev" | ||||||
| } | } | ||||||
|  |  | ||||||
| export async function request(service: string, input: string, init?: RequestInit) { | export async function request(service: string, input: string, init?: RequestInit, noRetry?: boolean) { | ||||||
|   const url = buildRequestUrl(service, input) |   const url = buildRequestUrl(service, input) | ||||||
|   return await fetch(url, init) |   const res = await fetch(url, init) | ||||||
|  |  | ||||||
|  |   if (res.status === 401 && !noRetry) { | ||||||
|  |     const res = await request("identity", "/api/auth/token", { | ||||||
|  |       method: "POST", | ||||||
|  |       headers: { "Content-Type": "application/json" }, | ||||||
|  |       body: JSON.stringify({ | ||||||
|  |         refresh_token: await getRtk(), | ||||||
|  |         grant_type: "refresh_token" | ||||||
|  |       }) | ||||||
|  |     }, true) | ||||||
|  |     if (res.status !== 200) { | ||||||
|  |       const err = await res.text() | ||||||
|  |       throw new Error(err) | ||||||
|  |     } else { | ||||||
|  |       const data = await res.json() | ||||||
|  |       await Preferences.set({ | ||||||
|  |         key: "identity.access_token", | ||||||
|  |         value: data["access_token"] | ||||||
|  |       }) | ||||||
|  |       await Preferences.set({ | ||||||
|  |         key: "identity.refresh_token", | ||||||
|  |         value: data["refresh_token"] | ||||||
|  |       }) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     console.info("[REQUEST] Auth context has been refreshed.") | ||||||
|  |     return await request(service, input, Object.assign(init as any, { | ||||||
|  |       headers: { Authorization: `Bearer ${await getAtk()}` } | ||||||
|  |     }), true) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   return res | ||||||
| } | } | ||||||
|  |  | ||||||
| export function buildRequestUrl(service: string, input: string) { | export function buildRequestUrl(service: string, input: string) { | ||||||
|   | |||||||
| @@ -21,7 +21,11 @@ export async function getAtk() { | |||||||
|   return (await Preferences.get({ key: "identity.access_token" })).value |   return (await Preferences.get({ key: "identity.access_token" })).value | ||||||
| } | } | ||||||
|  |  | ||||||
| export async function checkLoggedIn(): boolean { | export async function getRtk() { | ||||||
|  |   return (await Preferences.get({ key: "identity.refresh_token" })).value | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export async function checkLoggedIn(): Promise<boolean> { | ||||||
|   return (await Preferences.get({ key: "identity.access_token" })).value != null |   return (await Preferences.get({ key: "identity.access_token" })).value != null | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user