feat: redirect user to the page they originally requested

pull/239/head
Josh Moore 1 year ago
parent b46198eb47
commit 4b68cb7c31

@ -44,7 +44,11 @@ const assMetaMiddleware = (port: number, proxied: boolean): RequestHandler =>
const loginRedirectMiddleware = async (req: Request, res: Response, next: NextFunction) => { const loginRedirectMiddleware = async (req: Request, res: Response, next: NextFunction) => {
// If auth doesn't exist yet, make the user login // 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 { else {
const user = (await get('users', req.session.ass.auth.uid)) as AssUser; const user = (await get('users', req.session.ass.auth.uid)) as AssUser;

@ -58,7 +58,11 @@ router.post('/login', BodyParserJson(), (req, res) => {
token: '' 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 })); .catch((err) => res.status(400).json({ success: false, message: err.message }));
}); });

@ -8,6 +8,7 @@ declare module 'express-session' {
uid: string; uid: string;
token: string; token: string;
} }
preLoginPath?: string;
} }
} }
} }

@ -36,10 +36,11 @@ document.addEventListener('DOMContentLoaded', () => {
.then((res) => res.json()) .then((res) => res.json())
.then((data: { .then((data: {
success: boolean, success: boolean,
message: string message: string,
meta: { redirectTo: string }
}) => { }) => {
if (!data.success) alert(data.message); 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)) .catch((err) => errAlert('POST to /api/login failed!', err))
.finally(() => Elements.submitButton.disabled = false); .finally(() => Elements.submitButton.disabled = false);

Loading…
Cancel
Save