20 lines
737 B
JavaScript
20 lines
737 B
JavaScript
import jwt from "jsonwebtoken";
|
|
import { config } from "../config.js";
|
|
import { prisma } from "../db.js";
|
|
|
|
export async function requireAuth(request, response, next) {
|
|
try {
|
|
const [scheme, token] = String(request.headers.authorization || "").split(" ");
|
|
if (scheme !== "Bearer" || !token) {
|
|
return response.status(401).json({ error: "Authentication required" });
|
|
}
|
|
const payload = jwt.verify(token, config.JWT_SECRET);
|
|
const user = await prisma.user.findUnique({ where: { id: payload.sub } });
|
|
if (!user) return response.status(401).json({ error: "Account no longer exists" });
|
|
request.user = user;
|
|
next();
|
|
} catch {
|
|
response.status(401).json({ error: "Invalid or expired session" });
|
|
}
|
|
}
|