nodejs通行证因中间件而没有注销

时间:2017-06-21 07:31:37

标签: node.js express middleware passport.js

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

3 个答案:

答案 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!"
         });

    });