From b8fdb4202fa41a7a067f9fd5c366f4a873aaa604 Mon Sep 17 00:00:00 2001 From: seriousm4x Date: Tue, 15 Aug 2023 18:17:06 +0200 Subject: [PATCH] feat: only refresh jwt if valid less than 1 day --- frontend/src/routes/+layout.svelte | 22 ++++++++++++++++++++++ frontend/src/routes/login/+page.svelte | 7 +++++++ 2 files changed, 29 insertions(+) diff --git a/frontend/src/routes/+layout.svelte b/frontend/src/routes/+layout.svelte index 0139f5ac..5002ecf2 100644 --- a/frontend/src/routes/+layout.svelte +++ b/frontend/src/routes/+layout.svelte @@ -63,6 +63,12 @@ return; } + // only refresh token if valid less than 1 day + const jwt = parseJwt($pocketbase.authStore.token); + if (jwt.exp > Date.now() / 1000 + 60 * 60 * 24) { + return; + } + if ($pocketbase.authStore.model?.collectionName === 'users') { await $pocketbase .collection('users') @@ -76,6 +82,22 @@ }); } }); + + function parseJwt(token: string) { + var base64Url = token.split('.')[1]; + var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); + var jsonPayload = decodeURIComponent( + window + .atob(base64) + .split('') + .map(function (c) { + return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); + }) + .join('') + ); + + return JSON.parse(jsonPayload); + } diff --git a/frontend/src/routes/login/+page.svelte b/frontend/src/routes/login/+page.svelte index 6703665c..2ebe3514 100644 --- a/frontend/src/routes/login/+page.svelte +++ b/frontend/src/routes/login/+page.svelte @@ -6,6 +6,7 @@ import { faLockOpen, faEye } from '@fortawesome/free-solid-svg-icons'; import { toggleVisibility } from '$lib/helpers/forms'; import toast from 'svelte-french-toast'; + import { onMount } from 'svelte'; let inputPassword: HTMLInputElement; let form = { @@ -13,6 +14,12 @@ password: '' }; + onMount(() => { + if ($pocketbase.authStore.isValid) { + goto('/'); + } + }); + function tryAdminThenUser() { $pocketbase.admins .authWithPassword(form.email, form.password)