简体   繁体   English

用户未定义:Nodejs / Express + Passport

[英]user is not defined: Nodejs/Express + Passport

My problem is very similar to this question however the answers seems to not work for me (I see that user never picked an answer also). 我的问题与这个问题非常相似,但答案似乎对我不起作用(我看到用户也从未选择过答案)。

I have a fresh install of Nodejs and Express. 我全新安装了Nodejs和Express。

My setup: 我的设置:

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' }));

I'm using express-session . 我正在使用快递

My LocalStrategy, serialize and deserialize user are all getting called, but frankly I'm not really sure what to put on the deserialize function on this test app. 我的LocalStrategy,序列化和反序列化用户都被调用了,但坦率地说,我真的不确定在这个测试应用程序上放置deserialize函数。

Any suggestions for a fix? 有什么修复建议吗?

You get user is not defined because user in fact is not defined in your deserializeUser() callback. user is not defined user ,因为事实上未在您的deserializeUser()回调中user is not defined user If you look at the example in the Sessions section on this page , you will see that you are supposed to look up the id in your database and pass a user object (generated from the result of the database query) to the done callback. 如果查看本页 “会话”部分中的示例,您将看到您应该在数据库中查找id并将用户对象(从数据库查询的结果生成)传递给done回调。

For simple testing purposes, you could easily just use a fake user object until you have a database set up: 出于简单的测试目的,您可以轻松地使用虚假的用户对象,直到您设置了数据库:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM