从Req.User()获取信息到ExpressJS中的Req.params()

在用户login到我的Express应用程序之后,我想将它们redirect到一个url,其内容如下:

www.mysite.com/:user 

我遇到麻烦的是,当人们在login后req.params ,我的req.params对象将作为一个空对象文字出现。

理想情况下,我想要做的是以req.user存储的信息,并将一些信息传递到URL中。

所以基本上我想从这里得到:

 router.post('/login', passport.authenticate('local', {successRedirect:'/', failureRedirect: '/login', failureFlash: true})); 

到这里:

 router.get('/:user', function(req, res) { //stuff } 

login后, req.user对象读取如下所示:

 { username: joesmith@mail.com, name: Joe Smith, password: dkei348#$kDL^583L, formulas: [] } 

我试图使用的代码如下所示:

 router.get('/:user', function(req, res) { var user = req.user.name; req.params = { "user": user } 

但这是行不通的,因为最初req.user.name是未定义的,如果有人还没有login,所以我不能通过控制台错误。

显然我不明白如何req.params生成足够的细节来解决这个问题。

谢谢。

如果你想在参数中'/' + req.user.name);户名,你应该redirect到'/' + req.user.name); 因为“/”没有任何参数。 这就是为什么它是未定义的。 (此外,你应该检查参数是否定义和处理错误,所以而不是控制台错误,你会得到错误404或到下一个,正确的路由path)。

护照文件 privides doiung它的例子:

 app.post('/login', passport.authenticate('local'), function(req, res) { // If this function gets called, authentication was successful. // `req.user` contains the authenticated user. res.redirect('/' + req.username); }); 

或更复杂的自定义callback:

 app.get('/login', function(req, res, next) { passport.authenticate('local', function(err, user, info) { if (err) { return next(err); } if (!user) { return res.redirect('/login'); } req.logIn(user, function(err) { if (err) { return next(err); } return res.redirect('/' + user.name); }); })(req, res, next); }); 

但我认为这不是一个好的做法,更安全的是通过req.user的价值redirect到适当的页面/内容,而不会把它放到URL,例如设置req.auth。 然后使用next(); 而不是res.redirect('/' + user.name); 去下一个中间件。 req.auth.username户名将从req.auth.username ,而不是从/:username

你的路由结构是怎样的? 你应该确保router.get('/:user' ..不是在router.get('/login'..

看起来你想访问任何/:user价值。 如www.mysite.com/stretch0 。 因此你可以像var user = req.params.user;一样访问它var user = req.params.user;

您可以提供自定义处理程序,而不是让Passport执行所有redirect操作:

 app.post('/login', function(req, res, next) { passport.authenticate('local', function(err, user, info) { if (err) { req.flash('error', 'Unable to authenticate user'); return res.redirect('/login'); } if (! user) { return res.redirect('/login'); } req.logIn(user, function(err) { if (err) { req.flash('error', 'Unable to log in user'); return res.redirect('/login'); } return res.redirect('/' + user.username); }); })(req, res, next); }); 

这意味着每个login用户都会获得他们的“个人”url,因为您正在redirect到/USERNAME 。 我不确定你的问题,如果这实际上是你的意图。