Login Status Überprüfung
This commit is contained in:
@@ -1,11 +1,7 @@
|
||||
---
|
||||
// import i18next from "i18next";
|
||||
// import {localizeUrl} from "astro-i18next"
|
||||
// import { t } from "i18next";
|
||||
import { isLoggedIn } from "../lib/UI/isLoggedIn";
|
||||
// import LanguageDropdown from "./LanguageDropdown.svelte";
|
||||
import { validateAccessTokenServer } from "#lib/validateAccessToken"
|
||||
|
||||
const loggedIn = isLoggedIn(Astro);
|
||||
const valid = await validateAccessTokenServer(Astro)
|
||||
---
|
||||
|
||||
<header class="header">
|
||||
@@ -60,7 +56,7 @@ const loggedIn = isLoggedIn(Astro);
|
||||
>
|
||||
<a class="headerButton" href="/agb">AGB</a>
|
||||
{
|
||||
loggedIn ? (
|
||||
valid ? (
|
||||
<a class="headerButton" href="/user">
|
||||
Profil
|
||||
</a>
|
||||
|
||||
@@ -1,8 +1,49 @@
|
||||
import Cookies from "js-cookie";
|
||||
import { API_ACCESS_TOKEN_COOKIE_NAME, API_REFRESH_TOKEN_COOKIE_NAME } from "./constants";
|
||||
import { client } from "src/trpc";
|
||||
import { AstroCookies, AstroGlobal } from "astro";
|
||||
import { createCaller } from "./caller";
|
||||
|
||||
export async function validateAccessToken() {
|
||||
export async function validateAccessTokenServer(astro: Readonly<AstroGlobal<Record<string, any>>>) {
|
||||
const accessToken = astro.cookies.get(API_ACCESS_TOKEN_COOKIE_NAME).value;
|
||||
const refreshToken = astro.cookies.get(API_REFRESH_TOKEN_COOKIE_NAME).value;
|
||||
|
||||
if (accessToken) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Wir haben keinen Access Token mehr, vielleicht ist dieser ausgelaufen.
|
||||
// Schauen wir mal, ob wir einen Refresh Token haben.
|
||||
|
||||
if (!refreshToken) {
|
||||
// Wir haben keinen Refresh Token, also müssen wir uns neu anmelden.
|
||||
return false;
|
||||
}
|
||||
|
||||
// Wir haben einen Refresh Token, also versuchen wir uns damit anzumelden.
|
||||
// Wenn das klappt, dann haben wir auch einen neuen Access Token.
|
||||
// Wenn das nicht klappt, dann müssen wir uns neu anmelden.
|
||||
try {
|
||||
const { accessToken: newAccessToken, exp } = await createCaller(astro).v1.benutzer.getAccessToken.query({
|
||||
refreshToken
|
||||
})
|
||||
|
||||
const options = {
|
||||
domain: `.${window.location.hostname}`,
|
||||
path: "/",
|
||||
expires: exp
|
||||
}
|
||||
|
||||
astro.cookies.set(API_ACCESS_TOKEN_COOKIE_NAME, newAccessToken, options);
|
||||
return true;
|
||||
} catch (e) {
|
||||
astro.cookies.delete(API_ACCESS_TOKEN_COOKIE_NAME);
|
||||
astro.cookies.delete(API_REFRESH_TOKEN_COOKIE_NAME);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export async function validateAccessTokenClient() {
|
||||
const accessToken = Cookies.get(API_ACCESS_TOKEN_COOKIE_NAME);
|
||||
const refreshToken = Cookies.get(API_REFRESH_TOKEN_COOKIE_NAME);
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
import Overlay from "#components/Overlay.svelte";
|
||||
import EmbeddedAuthFlowModule from "#modules/EmbeddedAuthFlowModule.svelte";
|
||||
import AusweisGespeichertModule from "./AusweisGespeichertModule.svelte";
|
||||
import { validateAccessToken } from "#lib/validateAccessToken";
|
||||
import { validateAccessTokenClient } from "#lib/validateAccessToken";
|
||||
|
||||
export let uid: string | null = null;
|
||||
export let gebaeude: GebaeudeStammdaten = {} as GebaeudeStammdaten;
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
// Um einen Ausweis zu speichern müssen wir eingeloggt sein, andernfalls wird die API den call ablehnen.
|
||||
// Wir prüfen also ob wir eingeloggt sind und leiten den Nutzer ggf. auf die Login Seite weiter.
|
||||
if (!await validateAccessToken()) {
|
||||
if (!await validateAccessTokenClient()) {
|
||||
loginOverlayHidden = false;
|
||||
return
|
||||
}
|
||||
|
||||
@@ -1,7 +1,13 @@
|
||||
---
|
||||
import moment from "moment";
|
||||
import LoginModule from "../modules/LoginModule.svelte";
|
||||
import Layout from "../layouts/Layout.astro";
|
||||
import { validateAccessTokenServer } from "#lib/validateAccessToken";
|
||||
|
||||
const valid = await validateAccessTokenServer(Astro)
|
||||
|
||||
if (valid) {
|
||||
return Astro.redirect("/user")
|
||||
}
|
||||
|
||||
const redirect = Astro.url.searchParams.get("redirect")
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user