用户未定义:Nodejs/Express + Passport

Posted

技术标签:

【中文标题】用户未定义:Nodejs/Express + Passport【英文标题】:user is not defined: Nodejs/Express + Passport 【发布时间】:2015-03-24 11:31:42 【问题描述】:

我的问题与this question 非常相似,但是答案似乎对我不起作用(我看到该用户也从未选择过答案)。

我全新安装了 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() 代码有问题时才会发生这种情况。试着找出任何错别字。 【参考方案1】:

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

出于简单的测试目的,您可以轻松地使用假用户对象,直到您设置好数据库:

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

【讨论】:

以上是关于用户未定义:Nodejs/Express + Passport的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS Express req[user] 在多次刷新时未定义

无法读取 Nodejs 中未定义的属性

API 中未显示数据(NodeJS + Express)

NodeJS + Express 提供的 HTML 文件未加载 js 文件?

NodeJS / Express:从请求中获取用户名和密码

在带有 express-session 的 NodeJS 中使用安全 cookie 时会话不持久