在Node.js中使用express的Passport Local策略会话

时间:2017-04-06 10:28:00

标签: javascript node.js session passport-local

我是Node.js的新手,并使用护照本地策略进行登录会话。我已经在我的网络应用程序中设置了所有内容,但是我遇到了很大的会话问题。

我试过多个用户可以同时登录我的网络应用,但是有问题。其中一个用户(例如用户名为Paul)首先登录,然后另一个用户(Chris)登录后,保罗对我的网络应用程序的视图更改为Chris的视图。

我不确定你们是否理解我的意思但这是我在Node.js中的一个代码

app.get('/location', isLoggedIn, function(req, res){
  var user_temp = {user: ''};
  user_temp.user = global_username;
  res.render('location/index1', user_temp);
});

以下代码是Passport local-Strategy

var LocalStrategy = require('passport-local').Strategy;
passport.use('local-login',
  new LocalStrategy({
      usernameField : 'email',
      passwordField : 'password',
      passReqToCallback : true
    },
    function(req, email, password, done) {
      User.findOne({ 'email' :  email }, function(err, user) {
        if (err) return done(err);
        if (!user){
            req.flash("email", req.body.email);
            return done(null, false, req.flash('loginError', 'No user found.'));
        }
        if (!user.authenticate(password)){
            req.flash("email", req.body.email);
            return done(null, false, req.flash('loginError', 'Password does not Match.'));
        }
        var email_address = req.body.email;
        username_tmp = email_address;
        var username = email_address.substring(0, email_address.lastIndexOf("@"));
        global_username = username;
        pass = req.body.password;
        return done(null, user);
      });
    }
  )
);

我认为这个问题是因为global_username,所以Paul可以看到Chris的位置视图。但是,我不知道如何获取用户变量并将其放入每个用户的ejs中。

有人可以帮助我吗??

提前致谢!

P.S。如果我问的是困惑, 我可以再次编辑我的问题并解释更多......

1 个答案:

答案 0 :(得分:1)

你不能使用全局变量,它们会被覆盖每个请求,这将导致你正在描述的问题。

相反,如果您正确设置了Passport和express-session,Passport将通过req.user为每个(经过身份验证的)请求提供用户数据:

app.get('/location', isLoggedIn, function(req, res) {
  res.render('location/index1', { user : req.user });
});

您还可以查看the passport-local example application,了解所有内容的连接方式。