Spaces:
Sleeping
Sleeping
// filepath: /D:/code/CloudDiskDown/backend/src/middleware/auth.ts | |
import { Request, Response, NextFunction } from "express"; | |
import jwt, { JwtPayload } from "jsonwebtoken"; | |
import User from "../models/User"; | |
import { config } from "../config"; | |
interface AuthenticatedRequest extends Request { | |
user?: { | |
userId: string; | |
role: number; | |
}; | |
} | |
export const authMiddleware = async ( | |
req: AuthenticatedRequest, | |
res: Response, | |
next: NextFunction | |
): Promise<void | Response> => { | |
if (req.path === "/user/login" || req.path === "/user/register" || req.path === "/tele-images/") { | |
return next(); | |
} | |
const token = req.headers.authorization?.split(" ")[1]; | |
if (!token) { | |
return res.status(401).json({ message: "未提供 token" }); | |
} | |
try { | |
const decoded = jwt.verify(token, config.jwtSecret) as JwtPayload; | |
req.user = { | |
userId: decoded.userId, | |
role: decoded.role, | |
}; | |
const user = await User.findOne({ where: { userId: decoded.userId } }); | |
if (!user) { | |
return res.status(401).json({ message: "无效的 token" }); | |
} | |
next(); | |
} catch (error) { | |
res.status(401).json({ message: "无效的 token" }); | |
} | |
}; | |