Thursday, 4 May 2017

NodeJS Passport redirect

I am trying to implement user redirection with Passport on NodeJS and Express Backend script. The issue that I am facing is that my login page is not my default home page but it's rather this:

localhost:3000/login

I've managed to make it so that if user is not registered, he cannot access other pages such as /index or /dashboard but something breaks when I try to access hard-coded urls such as:

If I enter localhost:3000/ I can gain access to the default index.html page even if I'm not logged in. Just to clarify - localhost:3000/index == localhost:3000.

If I decide to manipulate the route like this: localhost:3000/Example/pages/index.html or localhost:3000/Example/pages/dashboard.html it would allow me to access the pages even if I am logged in.

My question is, how can I restrict users to manipulate the route to the default homepage and any other pages which have not been declared in the Node Backend?

My Node Routes Code:

app.get('/login',
        function(req, res){
            res.sendFile(path.join(__dirname + '/login.html'));
        });

    app.get('/index', isLoggedIn,
        function(req, res){
            res.sendFile(path.join(__dirname + '/index.html'));
        });


    app.post('/login',
        passport.authenticate('local', { failureRedirect: '/login' }),
        function(req, res) {
            res.redirect('/index');
        });

      app.post('/login',
    passport.authenticate('local', { failureRedirect: '/login' }),
    function(req, res) {
        res.redirect('/index');
    });

I've tried using this:

app.use(function(req, res, next) {
if (req.session.user == undefined) {  
      return res.render('/login', {  failureRedirect:'/login'  });
    }   
    else {
        next();
    }
});

but I receive an error: No default engine was specified and no extension was provided. I don't want to use JADE or Handlebars or anything else as an engine, just static HTML.

How can I restrict the route manipulation without having to define the rest of my node pages as app.get(/something, function(req,res){});



via coderJoe

No comments:

Post a Comment