我是 Node js 的新手,这是我的问题。
我在app.js中设置了从登录页面登录后重定向的代码,如下所示,
app.post('/login', function(req, res, next) {
passport.authenticate('local-login', function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/login'); }
req.flash("email");
var email_address = req.body.email;
var username = email_address.substring(0, email_address.lastIndexOf("@"));
global_username = username;
return res.redirect('/status.html'+'?channel='+username);
})(req, res, next);
});
现在我想使用 app.get 获取 '/status.html'+'?channel='+username
所以我创建了这样的代码,
app.get('/status.html?channel='+ global_username, isLoggedIn, function(req, res){
console.log("Logged in");
var chk_username = req.body.email;
var temp = chk_username.substring(0, chk_username.lastIndexOf("@"));
if(temp != global_username){return res.json({success: false, message:"Unauthorized Attempt"});}
});
但是,它没有通过 app.get 函数。我尝试使用 console.log 检查它是否已登录,但没有出现任何内容。
有人有办法解决这个问题吗?
谢谢。
好吧,首先,如果您使用 global_username
作为实际的全局变量,那么这不是一个好主意。这意味着每当有人登录时,每个人的值都会发生变化。我认为这不是您想要的。
此外,您的 route 根本不应该包含查询字符串内容;这通常不是路由的一部分,只是路径的一部分。坦率地说,我什至没有遵循您在该函数中尝试执行的操作,但您应该注意的另一件事是 get 请求中没有正文,因此即使您点击此中间件,您也不会从 req.body 获取一个值。
如果您想要做的只是重定向到某个 URL,然后访问当前用户,那么 Passport 会在 req 对象中为您设置该内容,因此您可以执行以下操作:
app.get('/status.html, isLoggedIn, function(req, res){
console.log("Logged in");
if (req.user) return res.send({message: 'Success'});
return res.status(401).send({message: 'you are not logged in'});
});
我是一名优秀的程序员,十分优秀!