【发布时间】:2017-06-21 07:31:36
【问题描述】:
我正在使用 nodejs、express、mongoose 和 passport npm 制作一个 webapp。
之前我的登录和注销功能运行良好,但现在我必须添加一个功能来检查用户是高级用户还是普通用户。 所以我做了一个中间件,现在导致注销问题。 这是我的代码。
在我的 index.js 文件中,每秒都会调用 /matchData 上的 ajax 请求,以根据用户类型获取数据。
//ajax routes for json response
router.get('/matchData', isPremium);
//middleware causing problem
function isPremium(req,res,next){
if(req.isAuthenticated()){
if(req.user.type=='premium'){
console.log("user is premium");
Match.getMatchLatestData(function(err,match){
if(err) throw err;
res.send(match[0]);
});
}else{
console.log("user is loggedin but not premium");
Match.getMatchData(function(err,match){
if(err) throw err;
res.send(match[0]);
});
}
}else{
console.log("user not logged in");
Match.getMatchData(function(err,match){
if(err) throw err;
res.send(match[0]);
});
}
}
在我的 user.js 中,我的登录和注销功能如下
//Login Routes
router.get('/login',isAuthenticated2, function(req, res, next) {
res.render('user/login',{
title:'login'
});
});
router.post('/login',isAuthenticated2, passport.authenticate('local',{failureRedirect:'/users/login', failureFlash:'Invalid Email Id or Password'}),function(req,res){
console.log('Authentication Successful');
req.flash('success','You are logged in.');
res.redirect('/');
});
//logout route
router.get('/logout',isAuthenticated,function(req,res){
req.logout();
req.flash('success','You have logged out');
res.redirect('/');
});
function isAuthenticated(req, res, next) {
if(req.isAuthenticated())
return next();
else{
req.flash('error','Please Login First')
res.redirect('/users/login');
}
}
function isAuthenticated2(req, res, next) {
if(req.isAuthenticated()){
req.flash('info','You are already logged in.')
res.redirect('/');
}
else
return next();
}
现在的问题是当我注销时它显示 flash msg 成功,但在我的控制台中它仍然显示我已登录但不是高级版或我是高级版,这是我登录的唯一情况。
【问题讨论】:
标签: node.js express middleware passport.js