handle 401 depending on settings.public and route.meta.public

This commit is contained in:
axolotle 2023-09-04 16:49:13 +02:00
parent 5286b22dd2
commit d39440c3bc
4 changed files with 19 additions and 5 deletions

View file

@ -38,11 +38,15 @@ export function useApi<T>(
.then((data) => {
result.data.value = data as T
})
.catch((e: FetchError) => {
.catch(async (e: FetchError) => {
result.error.value = e
if (e.statusCode === 401) {
useIsLoggedIn().value = false
navigateTo('/login')
const route = useRoute()
const settings = await useSettings()
if (!(settings.value.public && route.meta.public)) {
navigateTo('/login')
}
} else if (e.statusCode !== 400 && !e.data?.path) {
throw createError({
statusCode: e.statusCode,

View file

@ -1,7 +1,12 @@
import { useIsLoggedIn, useRedirectUrl } from '@/composables/states'
import {
useIsLoggedIn,
useRedirectUrl,
useSettings,
} from '@/composables/states'
export default defineNuxtRouteMiddleware((to, from) => {
export default defineNuxtRouteMiddleware(async (to, from) => {
const isLoggedIn = useIsLoggedIn()
const settings = await useSettings()
useRedirectUrl().value = (from.query.r as string) || null
if (useRedirectUrl().value && to.name === 'login') {
@ -11,7 +16,7 @@ export default defineNuxtRouteMiddleware((to, from) => {
if (to.name === 'login' && isLoggedIn.value) {
return navigateTo('/')
}
if (to.name !== 'login' && !isLoggedIn.value) {
if (!isLoggedIn.value && !(to.meta.public && settings.value.public)) {
return navigateTo('/login')
}
})

View file

@ -2,6 +2,10 @@
const { t } = useI18n()
const appsData = await useApps()
definePageMeta({
public: true,
})
const apps = computed(() => {
const appTileColors = [
['bg-primary', 'text-primary-content'],

View file

@ -5,6 +5,7 @@ import * as yup from 'yup'
definePageMeta({
layout: false,
public: true,
})
const { t } = useI18n()