从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
。 我不确定你的问题,如果这实际上是你的意图。