Node.js 在Passport策略的路由中传递用户信息
我正在尝试使用passportjs和express对用户进行身份验证 Passport.js看起来像这样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
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);
});