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.user
是undefined
。 GoogleStrategy
定义中的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,而不是重新使用访问令牌。