使用Passport在Express中传递参数

我使用Express和Passport做了一个小型的login应用程序。 但似乎我不能指导用户进入一个特定的用户configuration文件。 用户需要填写一个HTML表单,他必须redirect到他自己的configuration文件页面(为了简单起见,可以说这个页面与其他用户页面只有标题不同)。 我有这在我的用户路线。 (即routes / users.js)

router.get('/userprofile', authenticationMiddleware(), function (req, res, next) { res.render('userprofile'); }); router.post('/login', passport.authenticate('local-login', { successRedirect: '/users/userprofile', failureRedirect: '/users/login', failureFlash: true })); 

在我的passport.jsconfiguration文件中,我有这个。

 passport.use('local-login', new LocalStrategy({ usernameField: 'username', passwordField: 'password', passReqToCallback: true }, function (req, username, password, done) { db.pool.getConnection(function (err, connection) { if(err) throw err; var query = connection.query('SELECT * from users WHERE username = ?', username, function (err, rows) { if(err) return done(err); if(!rows.length) { return done(null, false, req.flash('loginMessage', 'No User Found')); } //Comparing passwords using bcrypt bcrypt.compare(password, rows[0].password, function(error, res){ if(res){ return done(null, rows[0]); } else { return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.')); } }); }); }); })); 

我需要做的是从窗体中获取用户名,并将其传递给passport.authenticate中的successRedirect属性,然后我可以修改get方法添加一个路由参数,如“/用户/:用户名”和呈现“用户名”视图。

我怎样才能做到这一点?

编辑:

我做了这样的事情

 router.get('/userprofile/:username', authenticationMiddleware(), function (req, res, next) { res.render('userprofile', { username: req.params.username, title: 'Welcome, '+ req.params.username }); }); router.post('/login', function (req, res, next) { //Testing callback. console.log("Username is: " + req.body.username); passport.authenticate('local-login', { successRedirect: '/users/userprofile/' + req.body.username, failureRedirect: '/users/login', failureFlash: true })(req, res); next(); }); 

这在一些尝试中起作用。 但是,有时会返回此错误。

 POST /users/login 404 43.741 ms - 5226 /home/dasun/WebstormProjects/schoolentry/node_modules/passport/lib/middleware/authenticate.js:249 if (err) { return next(err)}; 

我怎样才能摆脱这个错误?

谢谢。

find答案。 在/loginpath中,我错过了POST方法。

即我应该写

 router.post('/login', function (req, res, next) { //Testing callback. console.log("Username is: " + req.body.username); passport.authenticate('local-login', { successRedirect: '/users/userprofile/' + req.body.username, failureRedirect: '/users/login', failureFlash: true })(req, res, next); });