如果身份验证成功,将调用下一个处理程序,并将
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");
});
路由req.user
中的/success
为undefined
。 req.user
定义中的GoogleStrategy
是可以的。这是为什么?
答案 0 :(得分:1)
你有没有使用会话的原因?
尝试使用{session:false}
app.use(express.cookieSession());
//passport config here
app.use(passport.initialize());
app.use(passport.session());
//routes here
答案 1 :(得分:0)
req.user
的选项中指定session: false
, passport.authenticate
将无法设置。
您可以像在新GoogleStrategy的回调中一样使用用户的个人资料,但请注意,您的服务器最终可能会让用户对每个请求进行身份验证,而不是重复使用访问令牌。