我正在使用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成功但在我的控制台中它仍然显示我已登录但不是高级或我是高级,这是我登录的唯一情况。
答案 0 :(得分:1)
而不是使用req.logout()
尝试使用以下代码段
req.session.destroy(function (err) {
res.redirect('/');
});
答案 1 :(得分:0)
在节点中尝试此代码我们在登录后为用户设置会话,销毁同样将注销用户
//logout route
router.get('/logout',function(req,res){
req.session.user = '';
res.redirect('/login'); // redirect wherever required
});
答案 2 :(得分:0)
我遇到了类似的问题,并从for more info
找到答案app.get('/logout', function(req, res){
req.logout();
res.redirect('/');
});
或者如果您有退出页面。
app.get('/logout', function(req, res){
req.logout();
res.render('logout', {
title: "Moi moi!"
});
});