From e8efb7ab33f7ac4e021cd6cada8847d4145f5deb Mon Sep 17 00:00:00 2001 From: Hannah <hz018@hdm-stuttgart.de> Date: Mon, 11 Dec 2023 08:12:52 +0100 Subject: [PATCH] Register.tsx und neue Navbar wenn jwt vorhanden #24 --- growbros-frontend/src/App.tsx | 32 +++++++++++++++++-- growbros-frontend/src/components/Navbar.tsx | 6 +++- growbros-frontend/src/jwt/Cookies.ts | 6 ++-- package-lock.json | 6 ++++ .../hdm/mi/growbros/security/JwtService.java | 5 +-- 5 files changed, 46 insertions(+), 9 deletions(-) create mode 100644 package-lock.json diff --git a/growbros-frontend/src/App.tsx b/growbros-frontend/src/App.tsx index 502b042..daed603 100644 --- a/growbros-frontend/src/App.tsx +++ b/growbros-frontend/src/App.tsx @@ -17,9 +17,35 @@ function App() { const location = useLocation(); useEffect(() => { - const cookieThere = getCookie("jwt")==null; - console.log("Cookie is there" + cookieThere); - setIsLoggedIn(cookieThere); + const jwtCookie = getCookie("jwt"); + + if (!jwtCookie) { + // Wenn der JWT-Cookie nicht vorhanden ist + setIsLoggedIn(false); + return; + } + + // Der JWT-Cookie ist vorhanden - Überprüfe die Gültigkeit + // @ts-ignore + const tokenParts = jwtCookie.split('.'); + if (tokenParts.length !== 3) { + // Ungültiges JWT-Format (nicht genau 3 Teile) + setIsLoggedIn(false); + return; + } + + const payload = JSON.parse(atob(tokenParts[1])); + const expirationTime = payload.exp * 1000; // Umwandlung in Millisekunden + + // Überprüfe das Ablaufdatum + if (Date.now() > expirationTime) { + // JWT ist abgelaufen + setIsLoggedIn(false); + return; + } + + // JWT ist vorhanden und gültig + setIsLoggedIn(true); }, [location.pathname]); return ( diff --git a/growbros-frontend/src/components/Navbar.tsx b/growbros-frontend/src/components/Navbar.tsx index ea720e4..94f5d15 100644 --- a/growbros-frontend/src/components/Navbar.tsx +++ b/growbros-frontend/src/components/Navbar.tsx @@ -1,6 +1,7 @@ -import { NavLink } from "react-router-dom"; +import {NavLink} from "react-router-dom"; import "../stylesheets/Navbar.css"; import "font-awesome/css/font-awesome.min.css"; +import {deleteJwt} from "../jwt/Cookies.ts"; function Navbar() { return ( @@ -26,6 +27,9 @@ function Navbar() { <i className="fa fa-search"></i> </NavLink> </li> + <li> + <NavLink to="/" onClick={deleteJwt}>Abmelden</NavLink> + </li> </div> </ul> </nav> diff --git a/growbros-frontend/src/jwt/Cookies.ts b/growbros-frontend/src/jwt/Cookies.ts index 6ab4c56..5d6eb3e 100644 --- a/growbros-frontend/src/jwt/Cookies.ts +++ b/growbros-frontend/src/jwt/Cookies.ts @@ -21,7 +21,7 @@ export function getCookie(name: string | any[]){ }) return result; } -export function deleteCookie(name: string | any[]){ - // Setzt das Cookie mit dem gleichen Namen auf ein Ablaufdatum in der Vergangenheit - document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`; +export function deleteJwt(){ + document.cookie = `Jwt=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`; + console.log("deleted Cookie ") } diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..de7c4d6 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "GrowBros", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/src/main/java/hdm/mi/growbros/security/JwtService.java b/src/main/java/hdm/mi/growbros/security/JwtService.java index 13f8cb5..a14a4d2 100644 --- a/src/main/java/hdm/mi/growbros/security/JwtService.java +++ b/src/main/java/hdm/mi/growbros/security/JwtService.java @@ -34,6 +34,7 @@ public class JwtService { } public String generateToken(UserDetails userDetails) { + return generateToken(new HashMap<>(), userDetails); } @@ -43,8 +44,8 @@ public class JwtService { .setClaims(extraClaims) .setSubject(userDetails.getUsername()) .setIssuedAt(new Date(System.currentTimeMillis())) - .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24)) //token ist 24h gültig - .signWith(getSignInKey(), SignatureAlgorithm.HS256) + .setExpiration(new Date(System.currentTimeMillis() + 100)) //token ist 24h gültig + .signWith(getSignInKey(), SignatureAlgorithm.HS256) //dafür verantwortlich, den generierten JSON Web Token (JWT) mit einem geheimen Schlüssel (Secret Key) zu signiere .compact(); } public boolean isTokenValid(String token, UserDetails userDetails) { -- GitLab