Node.js 未定义用户:Nodejs/Express+;护照

Node.js 未定义用户:Nodejs/Express+;护照,node.js,express,passport.js,Node.js,Express,Passport.js,我的问题非常类似,但答案似乎对我不起作用(我看到用户也从未选择过答案) 我有一个新安装的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('h

我的问题非常类似,但答案似乎对我不起作用(我看到用户也从未选择过答案)

我有一个新安装的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、serialize和deserialize用户都会被调用,但坦率地说,我不太确定在这个测试应用程序上的反序列化函数应该放什么


有任何修复建议吗?

您得到的
用户未定义
,因为
用户
实际上未在
反序列化用户()回调中定义。如果查看上的会话部分中的示例,您将看到应该在数据库中查找
id
,并将用户对象(根据数据库查询结果生成)传递给
done
回调

出于简单的测试目的,在建立数据库之前,您可以轻松地使用假用户对象:

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