Javascript 使用Passport验证express应用程序-Expressjs Passportjs

Javascript 使用Passport验证express应用程序-Expressjs Passportjs,javascript,session,express,passport.js,Javascript,Session,Express,Passport.js,我有一个express应用程序,我正在尝试使用passport local进行身份验证。这是我的express应用程序: app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session({ secret: 'this is a string' })); app.use(passport.initialize()); app.use(passport.session()); clien

我有一个
express
应用程序,我正在尝试使用
passport local
进行身份验证。这是我的
express
应用程序:

app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({ secret: 'this is a string' }));
app.use(passport.initialize());
app.use(passport.session());

client = new pg.Client(connectionString);
client.connect();

passport.use(new LocalStrategy(
  function(username, password, done) {
    var query = client.query('SELECT * FROM users WHERE EMAIL = $1', [username], function(err, result){
      if(err) {
        console.log("Error");
        return done(err);
      }
      if(!result.rows.length > 0) {
        console.log("No users");
        return done(null, false, { message: 'User not found'});
      }
      if(result.rows[0].password !== password) {
        console.log("incorrect password");
        return done(null, false, { message: 'Password Incorrect'});
      }
      console.log('authenticated');
      return done(null, result.rows[0]);
    });
  }
));

passport.serializeUser(function(user, done) {
  'use strict';
  console.log('serialize');
  console.log(user);
  done(null, user.email);
});

passport.deserializeUser(function(id, done) {
  'use strict';
  console.log('deserialize');
  User.findById(id, function(err, user) {
    done(err, user);
  });
});

app.post('/login', passport.authenticate('local'), function(req, res) {
  'use strict';
  console.log(req.user.username);
});

app.listen(port, function() {
  'use strict';
  console.log('Listening on:', port);
});
然后,我在身体中点击
/login
url,点击
json
{username:'jason@gmail.com'密码:'密码
}。我通过
LocalStrategy
函数,然后在serialize函数中,它进入
done
函数,然后挂起。我没有收到任何错误或额外的日志记录,连接只是保持打开状态,控制权不会返回给调用方。我从未收到
http
状态,它只是挂起


我想我的
会话有问题,但我不知道下一步该怎么办?

好的,你能在那里尝试重定向吗?如果您在那一点上获得了正确的用户名,您的会话/身份验证看起来是正常的

app.post('/login', passport.authenticate('local', { 
  successRedirect: '/somewhere_intern', 
  failureRedirect: '/login' 
}));

简短的问题。您是否在console.log(req.user.username)上获得输出;打开域时:端口/登录?我将其更改为
console.log(req.user.user\u name)
,然后获取用户名。我添加了
{successRedirect:/users],failureRedirect:/projects“}
然后得到的错误是
无法获取/users
。我没有在此文件中定义
/users
路由。