Website : rimsha.abasa.com
backdoor
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
exp-backend
/
src
/
middleware
/
Filename :
accessTokenAuto.ts
back
Copy
import { Request, Response, NextFunction } from "express"; import isTokenExpired from "../utils/RefreshAccessToken/isTokenExpired"; import refreshAccessToken from "../utils/RefreshAccessToken/refreshAccessToken"; import setTokensCookies from "../utils/GenerateToken/setTokenCookies"; interface RefreshTokenResponse { newAccessToken: string; newRefreshToken: string; newAccessTokenExp: number; newRefreshTokenExp: number; userId: number; } const accessTokenAutoRefresh = async (req: Request, res: Response, next: NextFunction): Promise<void> => { try { const accessToken = req.cookies.accessToken; if (accessToken && !isTokenExpired(accessToken)) { req.headers["authorization"] = `Bearer ${accessToken}`; return next(); // Ensure next() is only called once } const refreshToken = req.cookies.refreshToken; if (!refreshToken) res.status(401).json({ status: "failed", message: "Refresh token is missing" }); const { newAccessToken, newRefreshToken, newAccessTokenExp, newRefreshTokenExp, userId } = await refreshAccessToken(req, res); setTokensCookies(res, newAccessToken, newRefreshToken, newAccessTokenExp, newRefreshTokenExp, userId); req.headers["authorization"] = `Bearer ${newAccessToken}`; return next(); // Make sure it is called only once } catch (error: any) { console.error("Error in accessTokenAutoRefresh middleware:", error.message); if (!res.headersSent) res.status(401).json({ status: "failed", message: "Unauthorized access or token refresh failed" }); } }; export default accessTokenAutoRefresh;