Spaces:
Sleeping
Sleeping
| import jwt from 'jsonwebtoken'; | |
| import { Request, Response, NextFunction } from 'express'; | |
| export interface AuthenticatedRequest extends Request { | |
| user?: { | |
| userId: number; | |
| tenantId: number; | |
| }; | |
| } | |
| export const authenticateToken = (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({ error: 'Access token required' }); | |
| } | |
| try { | |
| const decoded = jwt.verify(token, process.env.JWT_SECRET!) as any; | |
| req.user = { | |
| userId: decoded.userId, | |
| tenantId: decoded.tenantId | |
| }; | |
| next(); | |
| } catch (error) { | |
| return res.status(403).json({ error: 'Invalid or expired token' }); | |
| } | |
| }; |