diff --git a/nuxt.config.ts b/nuxt.config.ts index 041236e..46f49ae 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -4,10 +4,10 @@ export default defineNuxtConfig({ modules: [ '@pinia/nuxt', '@pinia-plugin-persistedstate/nuxt', - '@nuxtjs/tailwindcss', '@vee-validate/nuxt', '@vueuse/nuxt', '@nuxt/image', + '@nuxtjs/tailwindcss', ], veeValidate: { autoImports: true, @@ -16,7 +16,7 @@ export default defineNuxtConfig({ }, }, tailwindcss: { - cssPath: '~/styles/tailwind.css', + cssPath: './styles/tailwind.css', }, pinia: { storesDirs: ['./stores/**'], diff --git a/pages/manage/index.vue b/pages/manage/index.vue index 8d9a085..3b418ef 100644 --- a/pages/manage/index.vue +++ b/pages/manage/index.vue @@ -357,16 +357,16 @@ function copySongInfo() { }); } +try { + await $api.user.tokenValidity.query(); +} catch (err) { + onMounted(() => navigateTo('/manage/login')); +} + onMounted(async () => { // @ts-expect-error window isDesktop.value = window.innerWidth > 800 && window.innerHeight > 600; try { - try { - await $api.user.tokenValidity.query(); - } catch (err) { - navigateTo('/manage/login'); - } - songList.value = await $api.song.listUnused.query(); listLoading.value = false; arrangementList.value = await $api.arrangement.list.query(); diff --git a/server/env.ts b/server/env.ts index a61df45..a04d707 100644 --- a/server/env.ts +++ b/server/env.ts @@ -1,9 +1,5 @@ -import process from 'node:process'; -import * as dotenv from 'dotenv'; import { z } from 'zod'; -dotenv.config(); -dotenv.config({ path: '.env.local', override: true }); const envSchema = z.object({ NODE_ENV: z.enum(['development', 'production']), SIGN_PUBLIC_KEY: z.string(), @@ -13,6 +9,7 @@ const envSchema = z.object({ SIGN_KID: z.string(), ENC_KID: z.string(), SERVER_URL: z.string(), + TOKEN_EXPIRATION_TIME: z.string().optional().default('24h'), }); const envParse = envSchema.safeParse(process.env); diff --git a/server/trpc/utils/auth.ts b/server/trpc/utils/auth.ts index 2f1e2a5..288ef94 100644 --- a/server/trpc/utils/auth.ts +++ b/server/trpc/utils/auth.ts @@ -16,7 +16,7 @@ export class Auth { const jwt = await new jose.SignJWT({}) .setSubject(id.toString()) .setIssuedAt() - .setExpirationTime('24h') + .setExpirationTime(env.TOKEN_EXPIRATION_TIME) .setIssuer('the1068fm') .setJti(nanoid(32)) .setProtectedHeader({ diff --git a/styles/tailwind.css b/styles/tailwind.css index b5a94a8..fa58b20 100644 --- a/styles/tailwind.css +++ b/styles/tailwind.css @@ -8,76 +8,77 @@ font-family: AlimamaShuHeiTi; src: url('/ShuHeiTi.woff2') format("woff2"); } - + :root { --background: 0 0% 100%; --foreground: 222.2 84% 4.9%; - + --muted: 210 40% 96.1%; --muted-foreground: 215.4 16.3% 46.9%; - + --popover: 0 0% 100%; --popover-foreground: 222.2 84% 4.9%; - + --card: 0 0% 100%; --card-foreground: 222.2 84% 4.9%; - + --border: 214.3 31.8% 91.4%; --input: 214.3 31.8% 91.4%; - + --primary: 222.2 47.4% 11.2%; --primary-foreground: 210 40% 98%; - + --secondary: 210 40% 96.1%; --secondary-foreground: 222.2 47.4% 11.2%; - + --accent: 210 40% 96.1%; --accent-foreground: 222.2 47.4% 11.2%; - + --destructive: 0 84.2% 60.2%; --destructive-foreground: 210 40% 98%; - + --ring: 222.2 84% 4.9%; - + --radius: 0.5rem; } - + .dark { --background: 222.2 84% 4.9%; --foreground: 210 40% 98%; - + --muted: 217.2 32.6% 17.5%; --muted-foreground: 215 20.2% 65.1%; - + --popover: 222.2 84% 4.9%; --popover-foreground: 210 40% 98%; - + --card: 222.2 84% 4.9%; --card-foreground: 210 40% 98%; - + --border: 217.2 32.6% 17.5%; --input: 217.2 32.6% 17.5%; - + --primary: 210 40% 98%; --primary-foreground: 222.2 47.4% 11.2%; - + --secondary: 217.2 32.6% 17.5%; --secondary-foreground: 210 40% 98%; - + --accent: 217.2 32.6% 17.5%; --accent-foreground: 210 40% 98%; - + --destructive: 0 62.8% 30.6%; --destructive-foreground: 210 40% 98%; - + --ring: 212.7 26.8% 83.9%; } } - + @layer base { * { @apply border-border; } + body { @apply bg-background text-foreground; }