mad-lawsuit/backend/src/middleware/auth.ts

62 lines
1.4 KiB
TypeScript

import { Request, Response, NextFunction } from 'express';
import jwt from 'jsonwebtoken';
import { prisma } from '../index';
export interface AuthenticatedRequest extends Request {
user?: {
userId: number;
username: string;
};
}
export const authenticateToken = async (
req: AuthenticatedRequest,
res: Response,
next: NextFunction
) => {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN
if (!token) {
return res.status(401).json({
success: false,
message: 'Access token required',
});
}
try {
const jwtSecret = process.env['JWT_SECRET'];
if (!jwtSecret) {
return res.status(500).json({
success: false,
message: 'Server configuration error',
});
}
const decoded = jwt.verify(token, jwtSecret) as any;
// Verify user still exists
const user = await prisma.adminUser.findUnique({
where: { id: decoded.userId },
});
if (!user) {
return res.status(401).json({
success: false,
message: 'Invalid token - user not found',
});
}
req.user = {
userId: decoded.userId,
username: decoded.username,
};
next();
} catch (error) {
return res.status(403).json({
success: false,
message: 'Invalid or expired token',
});
}
};