Passport.js总是返回500内部错误

我正在尝试使用passport.js构build一个非常简单的身份validationAPI,但是我的代码总是返回500内部错误状态。

var express = require('express'); var bodyParser = require('body-parser'); var cookieParser = require('cookie-parser'); var expressSession = require('express-session'); var logger = require('morgan'); var path = require('path'); var passport = require('passport'); var passportLocal = require('passport-local'); var app = express(); app.set('port', process.env.PORT || 3000); app.set('view engine', 'ejs'); app.use(logger('dev')); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(expressSession({ secret: process.env.SESSION_SECRET || 'secret', resave: false, saveUninitialized: false })); app.use(passport.initialize()); app.use(passport.session()); passport.use(new passportLocal.Strategy(function (username, password, done) { console.log('login using ' + username); done(null, { id: 1, username: 'test', password: '12345'}); })); passport.serializeUser(function(user, done) { done(user.id); }); passport.deserializeUser(function(id, done) { done({ id: id, username: 'test', password: '12345' }); }); app.get('/', function(req, res) { res.render('index', { isAuthenticated: req.isAuthenticated(), user: req.user }); }); app.get('/login', function(req, res) { res.render('login'); }); app.post('/login', passport.authenticate('local'), function(req, res) { res.redirect('/'); }); app.listen(app.get('port'), function(){ console.log('server is listenning on port ' + app.get('port')); }); 

我在我的“/ login”path上有一个简单的post表单,我通过在用户名和密码字段中input任何我想要的东西来testing我的服务器,然后浏览器将发送请求发送到“/ login”,然后服务器成功到达线路:

 console.log('login using ' + username); 

结果是服务器返回值1(id:1)到浏览器和500内部服务器错误。

我错过了什么?

发现问题..

当在serializeUser中调用done函数时,我发送了我的user.id作为err对象。

为了解决这个问题,我简单地把

 passport.serializeUser(function(user, done) { done(user.id); }); 

至:

 passport.serializeUser(function(user, done) { done(null, user.id); });