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 :)
master
rob 2 years ago
parent a8f88d21e2
commit 540942599a

@ -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 = {

Loading…
Cancel
Save