From 253ca97fe88f2eb5e08e1e69f0f4187f224487f5 Mon Sep 17 00:00:00 2001 From: Rokojori Date: Thu, 16 Jul 2026 19:07:24 +0200 Subject: [PATCH] Token Refresh --- source/server/index.ts | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/source/server/index.ts b/source/server/index.ts index f5c0add..b2012a0 100644 --- a/source/server/index.ts +++ b/source/server/index.ts @@ -1,6 +1,7 @@ import 'dotenv/config'; -import express from 'express'; +import express, { Request, Response, NextFunction } from 'express'; import cookieParser from 'cookie-parser'; +import jwt from 'jsonwebtoken'; import path from 'path'; import authRouter from './routes/auth'; import adminRouter from './routes/admin'; @@ -10,6 +11,31 @@ const app = express(); app.set( 'trust proxy', 1 ); app.use( express.json() ); app.use( cookieParser() ); + +app.use( ( req: Request, res: Response, next: NextFunction ) => +{ + if ( req.path.startsWith( '/api/' ) ) { next(); return; } + const token = req.cookies?.accessToken as string | undefined; + if ( !token ) { next(); return; } + try + { + jwt.verify( token, process.env.JWT_SECRET ?? '' ); + next(); + } + catch ( err ) + { + if ( err instanceof jwt.TokenExpiredError ) + { + const redirect = encodeURIComponent( req.protocol + '://' + req.get( 'host' ) + req.originalUrl ); + res.redirect( `/api/auth/refresh-session?redirect=${redirect}` ); + } + else + { + next(); + } + } +} ); + app.use( express.static( path.join( __dirname, '..', '..', 'build', 'app' ) ) ); app.use( '/api/auth', authRouter );