Redirecting routes in Node using Express and Passport JS

user3554072

Lets say I have a route defined using Express Router for rendering the payment form:

router.get('/payment', (req, res) => {
  if (req.user) {
    res.render('payment', { user: req.user });
  } else {
    res.redirect('/login');
  }
});

If I am not logged in then I should be taken to the login page, when I login, I want to be redirected back to the payment form.

My login session is built using Passport. Here's how my POST login route looks like:

router.route('/login').post((req, res, next) => {
  req.assert('email', 'Please sign up with a valid email.').isEmail();
  req.assert('password', 'Password must be at least 4 characters long').len(4);

  var errors = req.validationErrors();
  if (errors) {
    req.flash('errors', errors);
    return res.redirect('/login');
  }

  passport.authenticate('login', {
    successRedirect: 'back',
    failureRedirect: '/login',
    failureFlash : true
  })(req, res, next);
});

On success, I am redirecting back to previous page, but this takes me to the homepage, which makes sense. I am not sure on login success, how I can redirect user to the payment form.

Aᴍɪʀ

There are couple of ways you can do this. The basic idea is to store the URL you want the user to be redirected to. You can store it in the URL itself via GET parameters, or you can use sessions.

That's the whole idea.

For example, to use sessions:

router.get('/payment', (req, res) => {
  if (req.user) {
    res.render('payment', { user: req.user });
  } else {
    req.session.returnURL = '/payment';
    res.redirect('/login');
  }
});

Then in your /login route:

router.route('/login').post((req, res, next) => {
  req.assert('email', 'Please sign up with a valid email.').isEmail();
  req.assert('password', 'Password must be at least 4 characters long').len(4);

  var errors = req.validationErrors();
  if (errors) {
    req.flash('errors', errors);
    return res.redirect('/login');
  }

  passport.authenticate('login', {
    successRedirect: req.session.returnURL || 'back',
    failureRedirect: '/login',
    failureFlash : true
  })(req, res, next);
});

The line req.session.returnURL || 'back' makes sure if the returnURL doesn't exist on the session, 'back' would be used instead.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Redirecting 301 using express and node.js. GET not being called

From Dev

node.js express routes using new RegExp

From Dev

Is node passport custom callback as middleware possible for express routes?

From Dev

Is node passport custom callback as middleware possible for express routes?

From Dev

node.JS Express passport routing

From Dev

node.JS Express passport routing

From Dev

Node.js express nested routes

From Dev

Node.js express nested routes

From Dev

Node.js + express: specify routes

From Dev

Express.js using await with passport

From Dev

Using Express Router in routes.js

From Dev

Facebook authentication with Passport JS using Node fails

From Dev

Node.js Express + Passport + Cookie Sessions n > 1 servers

From Dev

Updating a user record in Node js + Express + Passport + MongoDB

From Dev

Node.JS POST request to Express app secured by passport

From Dev

Node.js Express + Passport + Cookie Sessions n > 1 servers

From Dev

How to Avoid Repeating Passport.JS Code Used in Multiple Express.JS Routes

From Dev

Passport.js not redirecting after authenticating user

From Dev

How to separate routes on Node.js and Express 4?

From Dev

Node.js and express Rest api to create custom fields routes

From Dev

When using jsonwebtoken in express then what is the use of passport.js

From Dev

Using req.params as input for passport.authenticate() in passport.js (using Express 4.0)

From Dev

Using req.params as input for passport.authenticate() in passport.js (using Express 4.0)

From Dev

Routes in express JS

From Dev

Express JS Routes

From Dev

Using RegExp in express routes

From Dev

Node.js passing parameters to my require function in express.js/passport.js? understanding why?

From Dev

What is the difference using react-router and the express routes.js

From Dev

Emulating Node/Express Routes in .htaccess

Related Related

  1. 1

    Redirecting 301 using express and node.js. GET not being called

  2. 2

    node.js express routes using new RegExp

  3. 3

    Is node passport custom callback as middleware possible for express routes?

  4. 4

    Is node passport custom callback as middleware possible for express routes?

  5. 5

    node.JS Express passport routing

  6. 6

    node.JS Express passport routing

  7. 7

    Node.js express nested routes

  8. 8

    Node.js express nested routes

  9. 9

    Node.js + express: specify routes

  10. 10

    Express.js using await with passport

  11. 11

    Using Express Router in routes.js

  12. 12

    Facebook authentication with Passport JS using Node fails

  13. 13

    Node.js Express + Passport + Cookie Sessions n > 1 servers

  14. 14

    Updating a user record in Node js + Express + Passport + MongoDB

  15. 15

    Node.JS POST request to Express app secured by passport

  16. 16

    Node.js Express + Passport + Cookie Sessions n > 1 servers

  17. 17

    How to Avoid Repeating Passport.JS Code Used in Multiple Express.JS Routes

  18. 18

    Passport.js not redirecting after authenticating user

  19. 19

    How to separate routes on Node.js and Express 4?

  20. 20

    Node.js and express Rest api to create custom fields routes

  21. 21

    When using jsonwebtoken in express then what is the use of passport.js

  22. 22

    Using req.params as input for passport.authenticate() in passport.js (using Express 4.0)

  23. 23

    Using req.params as input for passport.authenticate() in passport.js (using Express 4.0)

  24. 24

    Routes in express JS

  25. 25

    Express JS Routes

  26. 26

    Using RegExp in express routes

  27. 27

    Node.js passing parameters to my require function in express.js/passport.js? understanding why?

  28. 28

    What is the difference using react-router and the express routes.js

  29. 29

    Emulating Node/Express Routes in .htaccess

HotTag

Archive