auth.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import jwt from "jsonwebtoken";
  2. import { cookies } from "next/headers";
  3. import * as cookie from "cookie";
  4. // Funktion zum Verifizieren des Tokens basierend auf Next.js-API
  5. export function verifyToken() {
  6. const cookieStore = cookies();
  7. const token = cookieStore.get("authToken");
  8. // Logging, um zu überprüfen, ob der Token vorhanden ist
  9. console.log("Received token from cookie:", token);
  10. if (!token) {
  11. console.log(
  12. "No token found in cookies. Cookie Store contents:",
  13. cookieStore.getAll()
  14. );
  15. return { error: "Unauthorized" };
  16. }
  17. try {
  18. const decoded = jwt.verify(token.value, process.env.JWT_SECRET);
  19. console.log("Token successfully verified:", decoded);
  20. return decoded;
  21. } catch (err) {
  22. console.error("Token verification failed:", err.message);
  23. return { error: "Invalid token" };
  24. }
  25. }
  26. // Alternative Funktion, die von Server-Side Rendering genutzt werden kann
  27. export function verifyTokenSSR(req) {
  28. // Cookies direkt aus den Request-Headers parsen (nützlich für SSR)
  29. const cookiesParsed = cookie.parse(req.headers.cookie || "");
  30. const token = cookiesParsed.authToken;
  31. console.log("Received token from headers:", token);
  32. if (!token) {
  33. console.log("No token found in headers. Full cookies:", cookiesParsed);
  34. return { error: "Unauthorized" };
  35. }
  36. try {
  37. const decoded = jwt.verify(token, process.env.JWT_SECRET);
  38. console.log("Token successfully verified:", decoded);
  39. return decoded;
  40. } catch (err) {
  41. console.error("Token verification failed:", err.message);
  42. return { error: "Invalid token" };
  43. }
  44. }
  45. // Hilfsfunktion zum Setzen des Auth-Tokens als Cookie (z.B. bei Login)
  46. export function setAuthToken(res, token) {
  47. const serializedToken = cookie.serialize("authToken", token, {
  48. httpOnly: true,
  49. secure: process.env.NODE_ENV !== "development", // Sicherstellen, dass es nur über HTTPS geht
  50. maxAge: 60 * 60 * 24, // 1 Tag gültig
  51. sameSite: "strict",
  52. path: "/",
  53. });
  54. res.setHeader("Set-Cookie", serializedToken);
  55. console.log("Auth token set in cookie:", serializedToken);
  56. }