import jwt from "jsonwebtoken"; import { cookies } from "next/headers"; import * as cookie from "cookie"; // Funktion zum Verifizieren des Tokens basierend auf Next.js-API export function verifyToken() { const cookieStore = cookies(); const token = cookieStore.get("authToken"); // Logging, um zu überprüfen, ob der Token vorhanden ist console.log("Received token from cookie:", token); if (!token) { console.log( "No token found in cookies. Cookie Store contents:", cookieStore.getAll() ); return { error: "Unauthorized" }; } try { const decoded = jwt.verify(token.value, process.env.JWT_SECRET); console.log("Token successfully verified:", decoded); return decoded; } catch (err) { console.error("Token verification failed:", err.message); return { error: "Invalid token" }; } } // Alternative Funktion, die von Server-Side Rendering genutzt werden kann export function verifyTokenSSR(req) { // Cookies direkt aus den Request-Headers parsen (nützlich für SSR) const cookiesParsed = cookie.parse(req.headers.cookie || ""); const token = cookiesParsed.authToken; console.log("Received token from headers:", token); if (!token) { console.log("No token found in headers. Full cookies:", cookiesParsed); return { error: "Unauthorized" }; } try { const decoded = jwt.verify(token, process.env.JWT_SECRET); console.log("Token successfully verified:", decoded); return decoded; } catch (err) { console.error("Token verification failed:", err.message); return { error: "Invalid token" }; } } // Hilfsfunktion zum Setzen des Auth-Tokens als Cookie (z.B. bei Login) export function setAuthToken(res, token) { const serializedToken = cookie.serialize("authToken", token, { httpOnly: true, secure: process.env.NODE_ENV !== "development", // Sicherstellen, dass es nur über HTTPS geht maxAge: 60 * 60 * 24, // 1 Tag gültig sameSite: "strict", path: "/", }); res.setHeader("Set-Cookie", serializedToken); console.log("Auth token set in cookie:", serializedToken); }