From 540942599a863043d6752a2d9602c88472bbeb0e Mon Sep 17 00:00:00 2001 From: rob Date: Fri, 4 Nov 2022 06:05:35 -0400 Subject: [PATCH] refactored to middleware The better approach in ExpressJS is to author up a quick middleware you can toss onto any route to short-circuit the rest fo the route with the redirect. The implementation submitted was actually running double output. The "checkForUser" method would call `res.redirect`, return, and then the method would continue and produce additional output. Explicit middleware helps prevent those kinds of errors :) --- app/controllers/welcome.js | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/app/controllers/welcome.js b/app/controllers/welcome.js index f92320e..f761fc6 100644 --- a/app/controllers/welcome.js +++ b/app/controllers/welcome.js @@ -23,23 +23,29 @@ class WelcomeController extends SiteController { captcha.loadFont(path.join(this.dtp.config.root, 'client', 'fonts', 'Dirty Sweb.ttf')); + function preventUserAccess (req, res, next) { + if (req.user) { + return res.redirect(301, '/'); + } + return next(); + } + const router = express.Router(); this.dtp.app.use('/welcome', welcomeLimiter, async (req, res, next) => { res.locals.currentView = 'welcome'; return next(); }, router); - router.get('/core-member', this.getWelcomeCoreMember.bind(this)); + router.get('/core-member', preventUserAccess, this.getWelcomeCoreMember.bind(this)); router.get('/signup/captcha', this.getSignupCaptcha.bind(this)); - router.get('/signup', this.getSignupView.bind(this)); - router.get('/login', this.getLoginView.bind(this)); - router.get('/', this.getHomeView.bind(this)); + router.get('/signup', preventUserAccess, this.getSignupView.bind(this)); + router.get('/login', preventUserAccess, this.getLoginView.bind(this)); + router.get('/', preventUserAccess, this.getHomeView.bind(this)); return router; } async getWelcomeCoreMember (req, res) { - await this.checkForUser(req, res); res.render('welcome/core-member'); } @@ -59,33 +65,19 @@ class WelcomeController extends SiteController { } async getSignupView (req, res) { - await this.checkForUser(req, res); req.session.captcha = req.session.captcha || { }; req.session.captcha.signup = captcha.randomText(4 + Math.floor(Math.random()*4)); res.render('welcome/signup'); } async getLoginView (req, res) { - await this.checkForUser(req, res); res.locals.loginResult = req.session.loginResult; res.render('welcome/login'); } - async getHomeView (req, res, next) { - try { - await this.checkForUser(req, res); - res.render('welcome/index'); - } catch (error) { - return next(error); - } + async getHomeView (req, res) { + res.render('welcome/index'); } - - async checkForUser (req, res) { - if (req.user) { - res.redirect(301, '/'); - } - } - } module.exports = {