Node.js 在Passport策略的路由中传递用户信息

Node.js 在Passport策略的路由中传递用户信息,node.js,facebook,express,passport.js,Node.js,Facebook,Express,Passport.js,我正在尝试使用passportjs和express对用户进行身份验证 Passport.js看起来像这样 var USER_INFO={}; 变量FB_http://localhost:3000/auth/facebook/callback'; module.exports=函数(passport){ passport.use(新facebook策略)({ 客户ID:FB\U客户ID, 客户机密:FB_客户机密, callbackURL:FB\u CALLBACK }, 函数(accessT

我正在尝试使用passportjs和express对用户进行身份验证

Passport.js看起来像这样

var USER_INFO={};
变量FB_http://localhost:3000/auth/facebook/callback';
module.exports=函数(passport){
passport.use(新facebook策略)({
客户ID:FB\U客户ID,
客户机密:FB_客户机密,
callbackURL:FB\u CALLBACK
}, 
函数(accessToken、refreshToken、profile、done){
process.nextTick(函数(){
用户_INFO.id=profile.id;
});
}));

}
首先,您应该不要将
用户信息={}
存储在当前请求的范围之外。如果两个单独的用户发出请求,那么他们将得到相同的对象

您至少应该以可以单独检索的方式存储它们

var USERS = {};
...
module.exports...
passport.use...
...

function(accessToken, refreshToken, profile, done) {
    USERS[profile.id] = profile;
    done(null, profile);
}));
现在,如果两个单独的用户发出请求,他们的信息将分别存储在
users

{
    1234: {id: 1234, name: FOO},
    6789: {id: 6789, name: BAR},
}
done(null,profile)
序列化该用户。如果您尚未定义您的应用程序,您应该这样做:

passport.serializeUser(function (user, done) {
    done(null, user.id);
});
passport.deserializeUser(function (id, done) {
    var user = USERS[id];
    done(null, user);
});
现在,您的用户将在各自的请求上下文中作为
req.user

所以你只需要做:

app.get('/fb', function (req, res) {
    res.json(req.user);
}); 
app.get('/fb', function (req, res) {
    res.json(req.user);
}); 

您忘记了在process.nextTick()中调用done()

您可以将任何对象传递给done(),它将在稍后的路由中成为req.user。在您的情况下,您想要响应的用户信息是req.USER

app.get('/fb', function (req, res) {
    res.json(req.user);
});