diff --git a/client/src/App.tsx b/client/src/App.tsx index 86954d3..cb538db 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -283,6 +283,7 @@ function App() {
  • Oprava časové zóny v "Poslední aktualizace"
  • Oprava přesměrování při přihlášení přes Authelia
  • Zobrazení jména uživatele místo loginu při přihlášení přes Authelia
  • +
  • Funkční odhlášení přes Authelia
  • Dnes je {data.date}

    diff --git a/client/src/context/auth.tsx b/client/src/context/auth.tsx index 7eb654c..aeee767 100644 --- a/client/src/context/auth.tsx +++ b/client/src/context/auth.tsx @@ -46,8 +46,13 @@ function useProvideAuth(): AuthContextProps { }, [decodedToken]); function logout() { + const trusted = (decodedToken as any).trusted; + const logoutUrl = (decodedToken as any).logoutUrl; setToken(null); setLoginName(undefined); + if (trusted && logoutUrl?.length) { + window.location.replace(logoutUrl); + } } return { diff --git a/server/.env.template b/server/.env.template index eb55c72..0525728 100644 --- a/server/.env.template +++ b/server/.env.template @@ -1,6 +1,9 @@ # Secret pro podepisování JWT tokenů. Minimální délka 32 znaků. # JWT_SECRET='CHANGE_ME' +# URL pro externí odhlášení, kam bude uživatel při odhlášení přesměrován pokud byl přihlášen pomocí Trusted Headers. +# LOGOUT_URL='https://auth.example.com/logout' + # Datové úložiště. Musí být 'json' nebo 'redis' (není case sensitive). # json - Data jsou ukládána do JSON souboru. Pomalé (práce se souborem), ale vhodné pro vývoj (snadnější prohlížení dat). # redis - Data jsou ukládána v Redis serveru. Dle potřeby může být nutné upravit REDIS_ proměnné viz dále. diff --git a/server/src/auth.ts b/server/src/auth.ts index d382ca3..8fe2706 100644 --- a/server/src/auth.ts +++ b/server/src/auth.ts @@ -17,7 +17,8 @@ export function generateToken(login?: string, trusted?: boolean): string { if (!login || login.trim().length === 0) { throw Error("Nebyl předán login"); } - return jwt.sign({ login, trusted: trusted || false }, process.env.JWT_SECRET); + const payload = { login, trusted: trusted || false, logoutUrl: process.env.LOGOUT_URL }; + return jwt.sign(payload, process.env.JWT_SECRET); } /**