用户未定义:Nodejs/Express + Passport

6
我的问题与这个问题非常相似,但是答案似乎对我不起作用(我看到该用户也从未选择过答案)。
我已经安装了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' }));

我正在使用 express-session
我的 LocalStrategy、序列化和反序列化用户都被调用了,但说实话,我不太确定在这个测试应用程序中应该在反序列化函数中放什么。
有任何修复的建议吗?

只有当您的 deserializeUser() 代码存在问题时,才会发生这种情况。请尝试查找任何错别字。 - Spark
1个回答

6
您会遇到“user is not defined”错误,是因为在您的“deserializeUser()”回调函数中实际上未定义“user”。如果您查看Sessions部分中此页面中的示例,您将看到应该在数据库中查找“id”,并将用户对象(从数据库查询结果生成)传递给“done”回调函数。为了进行简单的测试,您可以轻松地使用虚假用户对象,直到您设置了数据库。
passport.deserializeUser(function(id, done) {
  console.log('Deserialize user called.');
  return done(null, { firstName: 'Foo', lastName: 'Bar' });
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接