2017-01-16 16 views
1

Допустим, у меня есть маршрут, определенный с помощью экспресс-маршрутизатор для предоставления формы оплаты:Перенаправление маршрутов в узле с использованием экспресс и Passport JS

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

Если я не вошли в систему, то я должен быть приняты на страницу входа , когда я вхожу в систему, я хочу, чтобы меня перенаправили обратно в форму оплаты.

Моя сессия входа в систему построена с использованием паспорта. Вот как мой POST Войти маршрут выглядит следующим образом:

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); 
}); 

В случае успеха, я перенаправлять на предыдущую страницу, но это у меня уходит на домашнюю страницу, которая имеет смысл. Я не уверен в успехе входа в систему, как я могу перенаправить пользователя в форму оплаты.

ответ

1

Есть несколько способов, которыми вы можете это сделать. Основная идея - сохранить URL-адрес, на который вы хотите перенаправить пользователя. Вы можете сохранить его в самом URL-адресе через параметры GET или использовать сеансы.

Вот и вся идея.

Например, чтобы использовать сеансы:

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

Затем в /login маршруту:

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); 
}); 

Линия req.session.returnURL || 'back' убеждается, если returnURL не существует на сессии, 'back' будет используется вместо этого.

+0

работал с удовольствием! Спасибо. – user3554072

+0

Я рад, что это помогло :) –