Node.js PassportJS(Google OpenID)req.user中无任何内容
根据 如果验证成功,将调用下一个处理程序,并将Node.js PassportJS(Google OpenID)req.user中无任何内容,node.js,express,passport.js,Node.js,Express,Passport.js,根据 如果验证成功,将调用下一个处理程序,并将req.user属性设置为已验证的用户 然而,我有这样的想法: passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(obj, done) { done(null, obj); }); passport.use(new GoogleStrategy({ returnURL: "htt
req.user
属性设置为已验证的用户
然而,我有这样的想法:
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
是未定义的。GoogleStrategy
定义中的req.user
是正常的。为什么呢 您不使用会话有什么原因吗
尝试在不使用{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
您可以像在新Google策略的回调中一样使用用户的配置文件,但请注意,您的服务器可能最终会让用户验证每个请求,而不是重用访问令牌。我试图创建一个RESTful API,它应该是无状态的。