|
@@ -2,30 +2,82 @@ import {
|
|
|
Request, Response, NextFunction
|
|
Request, Response, NextFunction
|
|
|
} from "express";
|
|
} from "express";
|
|
|
import jwt from "jsonwebtoken";
|
|
import jwt from "jsonwebtoken";
|
|
|
|
|
+import {
|
|
|
|
|
+ redis
|
|
|
|
|
+} from "../config/redis";
|
|
|
|
|
+import {
|
|
|
|
|
+ User
|
|
|
|
|
+} from "../models/User";
|
|
|
|
|
|
|
|
export interface AuthRequest extends Request {
|
|
export interface AuthRequest extends Request {
|
|
|
userId?: string;
|
|
userId?: string;
|
|
|
|
|
+ context?: {
|
|
|
|
|
+ userId: string;
|
|
|
|
|
+ token: string;
|
|
|
|
|
+ };
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-export const authMiddleware = (req: AuthRequest, res: Response, next: NextFunction): void => {
|
|
|
|
|
|
|
+export const authMiddleware = async (req: AuthRequest, res: Response, next: NextFunction): Promise<void> => {
|
|
|
try {
|
|
try {
|
|
|
- const authHeader = req.headers.authorization;
|
|
|
|
|
|
|
+ const token = req.headers.authorization;
|
|
|
|
|
|
|
|
- if (!authHeader || !authHeader.startsWith("Bearer ")) {
|
|
|
|
|
|
|
+ if (!token) {
|
|
|
res.status(401).json({
|
|
res.status(401).json({
|
|
|
- success: false, message: "Token bulunamadı"
|
|
|
|
|
|
|
+ message: "token-not-found",
|
|
|
|
|
+ code: 401
|
|
|
});
|
|
});
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- const token = authHeader.split(" ")[1];
|
|
|
|
|
- const decoded = jwt.verify(token, process.env.JWT_SECRET as string) as { userId: string };
|
|
|
|
|
|
|
+ let decoded: { userId: string };
|
|
|
|
|
+ try {
|
|
|
|
|
+ decoded = jwt.verify(token, process.env.JWT_SECRET as string) as { userId: string };
|
|
|
|
|
+ } catch (err) {
|
|
|
|
|
+ res.status(401).json({
|
|
|
|
|
+ message: "expired-token",
|
|
|
|
|
+ code: 401
|
|
|
|
|
+ });
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- req.userId = decoded.userId;
|
|
|
|
|
|
|
+ if (!decoded || !decoded.userId) {
|
|
|
|
|
+ res.status(401).json({
|
|
|
|
|
+ message: "invalid-token",
|
|
|
|
|
+ code: 401
|
|
|
|
|
+ });
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const cachedToken = await redis.get(`user:${decoded.userId}`);
|
|
|
|
|
+ if (!cachedToken) {
|
|
|
|
|
+ res.status(401).json({
|
|
|
|
|
+ message: "expired-token",
|
|
|
|
|
+ code: 401
|
|
|
|
|
+ });
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (cachedToken !== token) {
|
|
|
|
|
+ res.status(401).json({
|
|
|
|
|
+ message: "invalid-token",
|
|
|
|
|
+ code: 401
|
|
|
|
|
+ });
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const user = await User.findById(decoded.userId);
|
|
|
|
|
+ if (!user) {
|
|
|
|
|
+ res.status(401).json({
|
|
|
|
|
+ message: "user-not-found",
|
|
|
|
|
+ code: 401
|
|
|
|
|
+ });
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
next();
|
|
next();
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
res.status(401).json({
|
|
res.status(401).json({
|
|
|
- success: false, message: "Geçersiz token"
|
|
|
|
|
|
|
+ message: "invalid-token",
|
|
|
|
|
+ code: 401
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|