gpt4 book ai didi

node.js - 在 ExpressJS 中从 Req.User() 获取信息到 Req.params()

转载 作者:太空宇宙 更新时间:2023-11-03 23:02:08 24 4
gpt4 key购买 nike

人们登录我的 Express 应用后,我想将他们重定向到如下网址:

www.mysite.com/:user

我遇到的问题是,当人们登录后被重定向时,我的 req.params 对象会显示为空对象文字。

理想情况下,我想做的是以某种方式获取存储在 req.user 中的信息,并将其中一些信息传递到 URL 中。

所以基本上我想从这里开始:

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

到这里:

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

登录后,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 是未定义的,所以我无法克服控制台错误。

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

谢谢。

最佳答案

如果你想在参数中包含用户名,你应该重定向到 '/' + req.user.name); 因为 '/' 没有任何参数。这就是为什么它是未定义的。 (此外,您应该检查参数是否已定义并处理错误,因此您不会收到控制台错误,而是收到错误 404 或进入下一个正确的路由路径)。

Passport Documentation提供了执行此操作的示例:

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

或更复杂的自定义回调:

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 值重定向到正确的页面/内容,而不将其放入 URL,例如设置 req.auth。然后使用 next(); 而不是 res.redirect('/' + user.name); 到达下一个中间件。用户名将从 req.auth.username 中获取,而不是从 /:username 中获取。

您的路由结构如何?您应该确保 router.get('/:user' .. 不在 router.get('/login'...

关于node.js - 在 ExpressJS 中从 Req.User() 获取信息到 Req.params(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44939412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com