用户没有定义:Nodejs / Express + Passport

我的问题是非常相似的这个问题,但答案似乎不适用于我(我看到,用户从来没有select一个答案也)。

我有一个全新的Nodejs和Express安装。

我的设置:

app.use(express.static(path.join(__dirname, 'public'))); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser('hithere')); app.use(session({ secret: 'hithere', resave: false, saveUninitialized: true })); app.use(passport.initialize()); app.use(passport.session()); passport.serializeUser(function(user, done) { console.log('Serialize user called.'); return done(null, user); }); passport.deserializeUser(function(id, done) { console.log('Deserialize user called.'); return done(null, user); }); passport.use(new LocalStrategy( function(username, password, done) { console.log('local strategy called with: %s', username); return done(null, {username:username, password:password}); })); app.use('/', routes); app.use('/users', users); app.get('/success', function(req, res) { req.send('sucess!'); }); app.get('/failure', function(req, res) { req.send('failure!'); }) app.post('/register', function(req, res) { console.log(req.body); }); app.post('/signup', passport.authenticate('local', { successRedirect: '/success', failureRedirect: '/failure' })); 

我正在使用快速会话 。

我的LocalStrategy,序列化和反序列化用户都被调用,但坦率地说,我不太确定这个testing应用程序上的反序列化函数。

任何修复build议?

你得到的user is not defined因为user实际上没有在deserializeUser()callback中定义。 如果您查看本页 “会话”部分中的示例,则会看到您应该在数据库中查找id ,并将用户对象(从数据库查询的结果生成)传递给donecallback。

为了简单的testing目的,你可以很容易地使用一个假的用户对象,直到你有一个数据库设置:

 passport.deserializeUser(function(id, done) { console.log('Deserialize user called.'); return done(null, { firstName: 'Foo', lastName: 'Bar' }); });