Report.user中没有PassportJS(Google OpenID)

时间:2013-12-18 02:35:48

标签: node.js express passport.js

根据PassportJS docs

  

如果身份验证成功,将调用下一个处理程序,并将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中的/successundefinedreq.user定义中的GoogleStrategy是可以的。这是为什么?

2 个答案:

答案 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将无法设置。

您可以像在新G​​oogleStrategy的回调中一样使用用户的个人资料,但请注意,您的服务器最终可能会让用户对每个请求进行身份验证,而不是重复使用访问令牌。