我是节点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检查它是否已登录,但没有出现任何内容。
有人有想法解决这个问题吗?
谢谢。
答案 0 :(得分:2)
好的,首先,如果您使用global_username
作为实际的全局变量,这不是一个好主意。这意味着每当有人登录时,每个人的价值都会发生变化。我不认为这就是你想要的。
此外,你的路线根本不应该包含查询字符串;这通常不是路由的一部分,只是路径的东西。坦率地说,我甚至没有遵循你在该功能中所做的事情,但另一件你应该知道的是,获取请求中没有正文,所以即使你点击这个中间件,你不会从req.body获得一个值。
如果您尝试做的只是重定向到网址,然后可以访问当前用户,那么护照会在您的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'});
});
答案 1 :(得分:0)
您可以这样做:
app.post('/login', (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;
console.log("Logged in");
var chk_username = req.body.email;
var temp = chk_username.substring(0, chk_username.lastIndexOf("@"));
if(temp != global_username){
res.json({success: false, message:"Unauthorized Attempt"});
}
return res.redirect('/status.html'+'?channel='+username);
})(req, res, next);
});
res.redirect
函数结束服务器和客户端之间的连接。因此,它不会达到对其发出的其他路由请求。基本上,您希望在函数内执行代码,而无需二次调用。您仍然可以为此给定实例之外的调用实现GET路由。