res.redirect()后用户未通过身份验证

时间:2014-07-03 01:06:59

标签: node.js express passport.js

我遇到了一个问题,尽管成功登录(由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'});
  })
);

正如您在护照配置中所看到的,我每次都会返回一个虚拟用户。进行更多调试表明该请求正在通过身份验证,但在重定向之后,它不再经过身份验证。

不确定该怎么做,任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

叹息我真的很愚蠢...答案潜伏在another question但是当我读到它时,我并没有把2和2放在一起。

我缺少express-session(在这里甚至不包括我的服务器配置,因此更难调试)。我一设立会议就行了。

如果其他人遇到同样的问题,请确保在您的应用配置中包含以下内容:

var session = require('express-session');
app.use(session({secret: 'dontderplikeme'});

当您添加护照并包含app.use(passport.session())时,这是用于存储凭据的会话。