diff --git a/backend/app/security/jwt_bearer.py b/backend/app/security/jwt_bearer.py index c82a297..b2d7bd2 100644 --- a/backend/app/security/jwt_bearer.py +++ b/backend/app/security/jwt_bearer.py @@ -28,7 +28,7 @@ class JWTBearer(HTTPBearer): if credentials: if not credentials.scheme == "Bearer": raise HTTPException( - status_code=403, detail="authentication_scheme_invalid" + status_code=401, detail="authentication_scheme_invalid" ) try: token = await token_service.verify_access_token( @@ -36,7 +36,7 @@ class JWTBearer(HTTPBearer): ) if not token: raise HTTPException( - status_code=403, detail="token_invalid_or_expired" + status_code=401, detail="token_invalid_or_expired" ) return token except InsufficientPermissionsError: @@ -44,4 +44,4 @@ class JWTBearer(HTTPBearer): except InvalidTokenAudienceError: raise HTTPException(status_code=403, detail="invalid_token_audience") else: - raise HTTPException(status_code=403, detail="authorization_code_invalid") \ No newline at end of file + raise HTTPException(status_code=401, detail="authorization_code_invalid") \ No newline at end of file diff --git a/frontend/src/lib/axios.svelte.ts b/frontend/src/lib/axios.svelte.ts index 31ad377..d086718 100644 --- a/frontend/src/lib/axios.svelte.ts +++ b/frontend/src/lib/axios.svelte.ts @@ -2,7 +2,7 @@ import axios from 'axios'; import { dev } from '$app/environment'; import { goto } from '$app/navigation'; import { get } from 'svelte/store'; -import { persistentSettings, clearLoginState } from '$lib/persistent-store'; +import { persistentSettings, clearLoginState } from '$lib/persistent_store'; if (dev) { axios.defaults.baseURL = "http://localhost:8000/api/v1" @@ -10,6 +10,9 @@ if (dev) { axios.defaults.baseURL = "/api/v1" } +// Get access token from local storage +axios.defaults.headers.common['Authorization'] = "Bearer " + get(persistentSettings).accessToken; + function createTokenRefreshInterceptor() { const interceptor = axios.interceptors.response.use( (response) => response, @@ -33,8 +36,9 @@ function createTokenRefreshInterceptor() { refresh_token: get(persistentSettings).refreshToken, }) .then((response) => { - // Save new refresh token + // Save new tokens persistentSettings.update(settings => { + settings.accessToken = response.data.access_token settings.refreshToken = response.data.refresh_token; return settings; }) @@ -70,6 +74,7 @@ export const login = async function(email: string, password: string) { .then((response) => { persistentSettings.update(settings => { settings.loggedIn = true + settings.accessToken = response.data.access_token settings.refreshToken = response.data.refresh_token return settings; }) diff --git a/frontend/src/lib/i18n.ts b/frontend/src/lib/i18n.ts index bac4b7e..5a428f0 100644 --- a/frontend/src/lib/i18n.ts +++ b/frontend/src/lib/i18n.ts @@ -3,7 +3,7 @@ import Backend from 'i18next-chained-backend' import Fetch from 'i18next-fetch-backend' import LocalStorageBackend from 'i18next-localstorage-backend' import I18nextBrowserLanguageDetector from 'i18next-browser-languagedetector' -import { createI18nStore } from './i18n-store' +import { createI18nStore } from './i18n_store' i18next .use(Backend) diff --git a/frontend/src/lib/i18n-store.ts b/frontend/src/lib/i18n_store.ts similarity index 100% rename from frontend/src/lib/i18n-store.ts rename to frontend/src/lib/i18n_store.ts diff --git a/frontend/src/lib/persistent-store.ts b/frontend/src/lib/persistent_store.ts similarity index 92% rename from frontend/src/lib/persistent-store.ts rename to frontend/src/lib/persistent_store.ts index 7e0c04c..6a94816 100644 --- a/frontend/src/lib/persistent-store.ts +++ b/frontend/src/lib/persistent_store.ts @@ -6,6 +6,7 @@ interface PersistedSettings { friendlyName: string email: string role: string + accessToken: string, refreshToken: string } @@ -15,6 +16,7 @@ const settingsDefault: PersistedSettings = { friendlyName: "", email: "", role: "member", + accessToken: "", refreshToken: "" } @@ -24,6 +26,7 @@ persistentSettings.subscribe((value) => localStorage.persistentSettings = JSON.s export const clearLoginState = function() { persistentSettings.update(settings => { + settings.accessToken = ""; settings.refreshToken = ""; settings.loggedIn = false; settings.friendlyName = ""; diff --git a/frontend/src/routes/(navbar)/+layout.svelte b/frontend/src/routes/(navbar)/+layout.svelte index b58d427..f603e37 100644 --- a/frontend/src/routes/(navbar)/+layout.svelte +++ b/frontend/src/routes/(navbar)/+layout.svelte @@ -1,6 +1,6 @@