2013-12-18 32 views
2

按照PassportJS docsPassportJS(谷歌的OpenID)没有在req.user

如果验证成功,接下来的处理程序将被调用和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/successundefinedGoogleStrategy定义中的req.user没问题。这是为什么?

回答

1

你有没有理由不使用会话?使用这种

尝试没有{会话:假}如果你设置的呼叫passport.authenticate选项session: false

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

我试图创建一个应该是无状态的RESTful API。 –

0

req.user将不会设置。

您可以像使用新的GoogleStrategy回调中那样使用用户的配置文件,但请注意,您的服务器最终可能会让用户对每个请求进行身份验证,而不是重新使用访问令牌。