我遇到了一个问题,尽管成功登录(由successRedirect处理程序触发证明),但请求仍然未经过身份验证,因此我的身份验证中间件会再次将我们发送回登录页面。
我的路线如下:
// ROUTES
module.exports = function(app, passport) {
app.get('/home', isLoggedIn, function(req, res) {
res.sendfile('imconfusedindex.html'); // this never gets sent.
});
app.post('/login', passport.authenticate('ldap-auth', {
successRedirect: '/home',
failureRedirect: '/login'
}));
}
// route middleware to make sure a user is logged in
function isLoggedIn(req, res, next) {
// if user is authenticated, we'll all float on OK
if (req.isAuthenticated()) {
return next();
}
// otherwise, redirect them to the login page
res.redirect('/login');
}
我的护照配置如下:
passport.serializeUser(function(user, done) {
done(null, user.user_id);
});
passport.deserializeUser(function(id, done) {
connection.query("select * from users where user_id = " + id, function(err, rows) {
done(err, rows[0]);
});
});
passport.use('ldap-auth', new LocalStrategy(
function(username, password, done) {
done(null, {user_id: 2, username: 'bob'});
})
);
正如您在护照配置中所看到的,我每次都会返回一个虚拟用户。进行更多调试表明该请求正在通过身份验证,但在重定向之后,它不再经过身份验证。
不确定该怎么做,任何想法都会受到赞赏。
答案 0 :(得分:0)
叹息我真的很愚蠢...答案潜伏在another question但是当我读到它时,我并没有把2和2放在一起。
我缺少express-session
(在这里甚至不包括我的服务器配置,因此更难调试)。我一设立会议就行了。
如果其他人遇到同样的问题,请确保在您的应用配置中包含以下内容:
var session = require('express-session');
app.use(session({secret: 'dontderplikeme'});
当您添加护照并包含app.use(passport.session())
时,这是用于存储凭据的会话。