【发布时间】:2017-08-01 12:24:49
【问题描述】:
我正在使用 NodeJS 构建一个应用程序,并且正在使用 PassportJS 进行用户身份验证。我使用req.isAuthenticated 作为res.render(/some-url function(req, res) {pass in object here}) 中的参数来根据某人是否登录来更改页面的布局。
现在我的页面总是呈现为登录状态,即使我刚刚启动应用程序!
这是我的 Passport 代码:
验证码:
passport.serializeUser(function(user, done) {
done(null, user.email);
});
passport.deserializeUser(function(id, done) {
mongo.connect("mongodb://localhost:27017/formulas", function(e, db){
if (e) {return next(e);}
var col = db.collection("users");
col.find({"email": id}, function(err, user){
done(err, {"email": id});
});
});
});
passport.use(new LocalStrategy({
usernameField: "email",
passwordField: "password"
},
function(username, password, done) {
mongo.connect("mongodb://localhost:27017/formulas", function(e, db) {
if (e) {return next(e);}
var col = db.collection("users");
col.find({"email": username, "password": password}, function(err, user){
if (err) { return done(err);}
if(!user) {
return done(null, false, { message: "Please check your log in
credentials." });
}
return done(null, {email: username, password: password});
});
});
}));
router.post('/login',
passport.authenticate('local', {successRedirect:'/',
failureRedirect:'/login',failureFlash: false})
);
router.get('/logout', function(req, res){
req.logout();
res.redirect('/login');
});
这是我的快速配置的相关部分:
APP.JS:
app.use(cookieParser());
// Express Session
app.use(session({
secret: 'secret',
resave: false,
saveUninitialized: true
}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
//initialize passport for app
app.use(passport.initialize());
app.use(passport.session());
// make mongodb available to the application
app.use((req, res, next) => {
mongo.connect('mongodb://localhost:27017/formulas', (e, db) => {
if (e) return next(e);
req.db = db;
next();
});
});
我尝试过为app.use(session{}) 尝试一些不同的配置,但这并没有产生影响。
我用以下方式渲染页面:
router.get(/page-location function(req, res) {
res.render('view', {
loggedIn: req.isAuthenticated
}
});
然后在我看来做
if (loggedIn) {
//show this stuff
}
if (!loggedIn) {
//show that stuff
}
它始终显示为loggedIn,即使在我注销后(完成后成功重定向),但由于某种原因req.isAuthenticated 一直显示为true。
【问题讨论】:
标签: node.js express passport.js express-session