[英]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.