route.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // app/api/auth/login/route.js
  2. import { NextResponse } from "next/server";
  3. import jwt from "jsonwebtoken";
  4. import users from "@/data/users";
  5. export async function POST(request) {
  6. const { username, password } = await request.json();
  7. const user = users.find((u) => u.username === username);
  8. if (!user || user.password !== password) {
  9. return NextResponse.json(
  10. { error: "Invalid username or password" },
  11. { status: 401, headers: { "Cache-Control": "no-store" } }
  12. );
  13. }
  14. const token = jwt.sign(
  15. {
  16. username: user.username,
  17. niederlassungId: user.id,
  18. role: user.role,
  19. },
  20. process.env.JWT_SECRET,
  21. { expiresIn: "1h" }
  22. );
  23. const redirectUrl =
  24. user.role === "admin" ? "/admin-view" : `/niederlassung/${user.id}`;
  25. const response = NextResponse.json({
  26. message: "Login successful",
  27. redirectUrl,
  28. });
  29. response.headers.set("Cache-Control", "no-store");
  30. // `secure: false` setzen, um sicherzustellen, dass der Cookie über HTTP funktioniert
  31. response.cookies.set("authToken", token, {
  32. httpOnly: true,
  33. secure: false, // Deaktiviert, um sicherzustellen, dass es auch über HTTP funktioniert
  34. sameSite: "Strict",
  35. maxAge: 3600, // 1 Stunde
  36. path: "/",
  37. });
  38. return response;
  39. }