Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/danielroe/roe.dev. This is the code and content for my personal website, built in Nuxt. roe.dev
Something went wrong. Try again.
TypeScript
1234567891011121314151617181920212223242526272829303132333435363738394041type UserStatus = 'pending' | 'logged-in' | 'logged-out'type User = { avatar?: string name?: string sponsor?: boolean authenticated?: boolean}
export default defineNuxtPlugin(nuxtApp => { const auth = reactive({ user: {} as User, login: async () => { try { auth.user = await $fetch('/api/user') } catch (err: any) { if (err.name !== 'FetchError') { auth.user = {} } } auth.status = auth.user.authenticated ? 'logged-in' : 'logged-out' }, logout: () => { useCookie('token', { maxAge: -1 }).value = '' return auth.login() }, status: ref<UserStatus>('pending'), })
nuxtApp.hook('app:suspense:resolve', () => { if (useCookie('token').value) auth.login() else auth.status = 'logged-out' })
return { provide: { auth, }, }})