PassportJS(Google OpenID)在req.user中没有任何内容

根据PassportJS文档

如果authentication成功,则将调用下一个处理程序,并将req.user属性设置为已通过身份validation的用户

但是我有这样的:

 passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(obj, done) { done(null, obj); }); passport.use(new GoogleStrategy({ returnURL: "http://localhost:3000/auth/google/return", realm: "http://localhost:3000/" }, function(id, profile, done) { console.log("Done: ", profile); done(null, profile); })); app.get('/auth/google', passport.authenticate('google', {session: false})); app.get('/auth/google/return', passport.authenticate('google', { successRedirect: '/success', failureRedirect: '/failure', session: false })); app.get('/success', function(req, res, next) { console.log(req.user); res.send(JSON.stringify(req.user)); }); app.get('/failure', function(req, res, next) { res.send("FAIL"); }); 

并且路由/success中的req.userundefinedGoogleStrategy定义中的GoogleStrategy可以。 这是为什么?

你有没有使用会话的原因?

尝试使用这个没有{session:false}

 app.use(express.cookieSession()); //passport config here app.use(passport.initialize()); app.use(passport.session()); //routes here 

如果在调用passport.authenticate的选项中指定session: false ,则req.user将不会被设置。

您可以像使用新的GoogleStrategycallback中那样使用用户的configuration文件,但请注意,您的服务器最终可能会使用户对每个请求进行身份validation,而不是重新使用访问令牌。