From 5fcb517c5840b7bf0a0eab9d75f8c576a1038b2b Mon Sep 17 00:00:00 2001 From: Rotimi Best Date: Fri, 7 Jul 2023 18:31:22 +0100 Subject: [PATCH] Redirect to login without token and not on a public route --- package.json | 2 +- src/routes/_layout.svelte | 12 ++++++++++++ src/utils/constants/routes.ts | 4 +++- src/utils/functions/routes/isPublicRoute.js | 8 ++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 src/utils/functions/routes/isPublicRoute.js diff --git a/package.json b/package.json index a37a8490..3a5ebe2f 100644 --- a/package.json +++ b/package.json @@ -95,4 +95,4 @@ "linux": {}, "mac": {} } -} +} \ No newline at end of file diff --git a/src/routes/_layout.svelte b/src/routes/_layout.svelte index f55127bd..b46b3dd2 100644 --- a/src/routes/_layout.svelte +++ b/src/routes/_layout.svelte @@ -32,6 +32,7 @@ isQuizPage, } from '../utils/functions/app'; import showAppsSideBar from '../utils/functions/showAppsSideBar'; + import isPublicRoute from '../utils/functions/routes/isPublicRoute'; import { user, profile } from '../utils/store/user'; import { getSupabase } from '../utils/functions/supabase'; import { isMobile } from '../utils/store/useMobile'; @@ -194,6 +195,17 @@ handleResize(); + if ( + !localStorage.getItem('supabase.auth.token') && + !isPublicRoute($page.path) + ) { + console.log( + 'No auth token and is not a public route, redirect to login', + path + ); + return goto('/login'); + } + const { data: authListener } = supabase.auth.onAuthStateChange( (event, session) => { // Log key events diff --git a/src/utils/constants/routes.ts b/src/utils/constants/routes.ts index 4e2c93e2..7f5bcb84 100644 --- a/src/utils/constants/routes.ts +++ b/src/utils/constants/routes.ts @@ -3,6 +3,7 @@ export const ROUTE = { DASHBOARD: '/dashboard', ONBOARDING: '/onboarding', COURSES: '/courses', + COURSE: '/course', LOGIN: '/login', SIGN_UP: '/signup', PROFILE: '/profile', @@ -14,11 +15,12 @@ export const ROUTE = { }; export const PUBLIC_ROUTES = [ - ROUTE.HOME, + `^${ROUTE.HOME}$`, ROUTE.LOGIN, ROUTE.SIGN_UP, ROUTE.FORGOT, ROUTE.RESET, + `^${ROUTE.COURSE}/.*`, ]; export const ROUTES_TO_HIDE_NAV = [ diff --git a/src/utils/functions/routes/isPublicRoute.js b/src/utils/functions/routes/isPublicRoute.js new file mode 100644 index 00000000..7422b5e7 --- /dev/null +++ b/src/utils/functions/routes/isPublicRoute.js @@ -0,0 +1,8 @@ +import { PUBLIC_ROUTES } from '../../constants/routes'; + +export default (route) => { + return PUBLIC_ROUTES.some((publicRoute) => { + const regex = new RegExp(publicRoute, 'g'); + return regex.test(route); + }); +};