由于中间件,nodejs 护照未注销

nodejs passport not logging out because of middleware

我正在使用 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 successful 但在我的控制台中它仍然显示我已登录但不是 premium 或者我是 premium,这是我登录的唯一情况。

而不是使用 req.logout() 尝试使用下面的代码片段

req.session.destroy(function (err) {
    res.redirect('/');
 });

尝试在节点中使用此代码,我们在登录后为用户设置会话,销毁它会注销用户

//logout route
router.get('/logout',function(req,res){
    req.session.user = '';
    res.redirect('/login'); // redirect wherever required
});

我遇到了类似的问题并从 http://www.passportjs.org/docs/logout/

找到了答案
app.get('/logout', function(req, res){
  req.logout();
  res.redirect('/');
});

或者如果您有注销页面。

   app.get('/logout', function(req, res){
    req.logout();
    res.render('logout', {
             title: "Moi moi!"
         });

    });