Node.js 中使用 express 的 Passport Local 策略会话
Passport Local strategy session using express in Node.js
我是 Node.js 的新手,使用本地护照策略登录会话。我已经在我的网络应用程序中设置了所有东西,但我在会话方面遇到了一个大问题。
我试过多个用户可以同时登录我的网络应用程序,但是有一个问题。一个用户(例如用户名是 Paul)先登录,然后另一个用户(Chris)登录,然后 Paul 对我的网络应用程序的视图更改为 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。如果我问的很困惑,
我可以再次编辑我的问题并解释更多...
您不能使用全局变量,它们会针对每个请求被覆盖,这将导致您所描述的问题。
相反,如果您正确设置了 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 了解所有内容的连接方式。
我是 Node.js 的新手,使用本地护照策略登录会话。我已经在我的网络应用程序中设置了所有东西,但我在会话方面遇到了一个大问题。
我试过多个用户可以同时登录我的网络应用程序,但是有一个问题。一个用户(例如用户名是 Paul)先登录,然后另一个用户(Chris)登录,然后 Paul 对我的网络应用程序的视图更改为 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。如果我问的很困惑, 我可以再次编辑我的问题并解释更多...
您不能使用全局变量,它们会针对每个请求被覆盖,这将导致您所描述的问题。
相反,如果您正确设置了 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 了解所有内容的连接方式。