From 4b68cb7c3187602776dde898cf0e997e567f7acc Mon Sep 17 00:00:00 2001 From: Josh Moore Date: Sat, 21 Oct 2023 22:23:27 -0600 Subject: [PATCH] feat: redirect user to the page they originally requested --- backend/app.ts | 6 +++++- backend/routers/api.ts | 6 +++++- common/global.d.ts | 1 + frontend/login.mts | 5 +++-- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/backend/app.ts b/backend/app.ts index bb8fc5a..a8e9d57 100644 --- a/backend/app.ts +++ b/backend/app.ts @@ -44,7 +44,11 @@ const assMetaMiddleware = (port: number, proxied: boolean): RequestHandler => const loginRedirectMiddleware = async (req: Request, res: Response, next: NextFunction) => { // If auth doesn't exist yet, make the user login - if (!req.session.ass?.auth) res.redirect('/login'); + if (!req.session.ass?.auth) { + req.session.ass!.preLoginPath = req.baseUrl; + log.warn('User not logged in', req.baseUrl); + res.redirect('/login'); + } else { const user = (await get('users', req.session.ass.auth.uid)) as AssUser; diff --git a/backend/routers/api.ts b/backend/routers/api.ts index 1101c78..fd7dee0 100644 --- a/backend/routers/api.ts +++ b/backend/routers/api.ts @@ -58,7 +58,11 @@ router.post('/login', BodyParserJson(), (req, res) => { token: '' }; - res.json({ success, message: `User [${user.username}] ${success ? 'logged' : 'failed to log'} in` }); + // Respond + res.json({ success, message: `User [${user.username}] ${success ? 'logged' : 'failed to log'} in`, meta: { redirectTo: req.session.ass?.preLoginPath ?? '/user' } }); + + // Delete the pre-login path after successful login + if (success) delete req.session.ass?.preLoginPath; }) .catch((err) => res.status(400).json({ success: false, message: err.message })); }); diff --git a/common/global.d.ts b/common/global.d.ts index 42fdcf2..d7d892e 100644 --- a/common/global.d.ts +++ b/common/global.d.ts @@ -8,6 +8,7 @@ declare module 'express-session' { uid: string; token: string; } + preLoginPath?: string; } } } diff --git a/frontend/login.mts b/frontend/login.mts index 19c1497..2f4952c 100644 --- a/frontend/login.mts +++ b/frontend/login.mts @@ -36,10 +36,11 @@ document.addEventListener('DOMContentLoaded', () => { .then((res) => res.json()) .then((data: { success: boolean, - message: string + message: string, + meta: { redirectTo: string } }) => { if (!data.success) alert(data.message); - else window.location.href = '/user'; + else window.location.href = data.meta.redirectTo; }) .catch((err) => errAlert('POST to /api/login failed!', err)) .finally(() => Elements.submitButton.disabled = false);