将护照openID-stategy与智威汤逊结合在一起

使用openID( passport-steam )尝试使用passport.js进行身份validation,然后使用令牌(JWT)而不是会话时,我遇到了问题。

我目前的代码如下所示:

app.post('/auth/steam', passport.authenticate('steam')); app.get('/auth/steam/return', passport.authenticate('steam', { failureRedirect: '/', session: false }), function(req, res) { var token = jwt.encode({ useridentifier: req.user.identifier}, tokenSecret); res.redirect('/'); }); 

但是,我遇到的问题是:我应该如何将令牌传回客户端? 由于这是一个从Steam网站回来后运行的GET请求,我不能用简单的答复

 res.json(token) 

就像我见过的人们和JWT一起使用本地策略一样。

我设法解决的唯一解决scheme就是使用包含令牌的会话(例如connect-flash),并在将其redirect到“/”后通过REST API与客户端进行通信,但是使用JWT是为了避免使用会话,不是吗?

经过多天的思考而没有得​​到任何地方,我设法找出另一种方法来解决它,使用cookie。

我发现关于自定义callback,通行证提供,我可以设置响应的标题,所以我重新定向之前设置一个这样的:

 res.cookie('token', token, { httpOnly: true }); 

(不安全,因为我只在本地服务器上testing)

这就是现在整个代码的样子:

 app.get('/auth/steam', passport.authenticate('steam')); app.get('/auth/steam/return', function(req, res, next) { passport.authenticate('steam', function(err, user, info){ var payload = { user: user.identifier }; var token = jwt.sign(payload, "thisisnotthesecretiactuallyuse", {expiresIn : 60*60*24}); res.cookie('token', token, { httpOnly: true /* TODO: Set secure: true */ }); res.redirect('/'); })(req, res, next) });