node.js - 使用 Express 将额外数据包含到 Passport 中间件中

标签 node.js express authentication passport.js

用户从另一个应用程序使用以这种形式生成的链接访问我的网络路由:/auth/steam/:id/:token , 其中:id:token此 Passport 中间件不需要。它们只是我想要跟踪的参数。

当用户成功通过身份验证后,我希望能够访问从初始 Web 请求到 /auth/steam/ 的这些值.我的路线目前看起来像这样:

this.app.get('/auth/steam/:id/:token', passport.authenticate('steam'), () => {

});

this.app.get('/auth/steam/return', passport.authenticate('steam', { failureRedirect: '/login' }), (req, res) => {
  // Would like access to id and token here

  res.render('index');
});

是否可以将数据与请求一起保存到返回路由等我注意到我想使用这些值的地方?我正在考虑使用 session ,但希望避免这种情况。

谢谢!

更新:我试过使用 express-session像这样向 session 添加数据:

this.app.get('/auth/steam/:id/:token', passport.authenticate('steam'), (res, req) => {
  req.session.discord_id = req.params.id;
  req.session.token = req.params.token;
  this.logger.info('Redirecting to Steam');
});

this.app.get('/auth/steam/return', passport.authenticate('steam', { failureRedirect: '/login' }), (req, res) => {
  console.log('session', req.session.token);
  res.redirect('/');
});

问题是当回到 /auth/steam/return 时, session 已使用来自 OpenID 请求的新 session 进行了更新。我的数据不再存在。

最佳答案

您显然不需要自定义登录策略,因为 Steam 有自己的 OpenID 策略 ( https://github.com/liamcurry/passport-steam )。

使用 session 可能是你尝试过的方法,我相信你可以对你的 '/auth/steam/:id/:token' 路线做一些调整这行得通。我提供了一个示例,该示例将您的 passport.authenticate('steam') 调用的顺序与您的其他回调切换(这永远不会发生,因为 passport.authenticate() 会重定向您),使用 express中间件 next() 函数,并包含一个 req.session.save(),它实际上将 session 保存回您正在使用的存储(文档在 https://github.com/expressjs/session ).当您返回 '/auth/steam/return'

时,如果使用以下内容作为您的新路线不会保存 session 的 discord_id 和 token 属性,请告诉我
this.app.get('/auth/steam/:id/:token', (req, res, next) => {
  req.session.discord_id = req.params.id;
  req.session.token = req.params.token;
  this.logger.info('Redirecting to Steam');
  req.session.save(next);
}, passport.authenticate('steam'));

关于node.js - 使用 Express 将额外数据包含到 Passport 中间件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43444596/

相关文章:

facebook - 登录按钮 : doesn't work when user is logged in Facebook

javascript - AngularJS : WebSocket is closed before the connection is established in Google Chrome

javascript - 如何避免 TypeError : callback. apply 不是函数并且 Callback 已被调用? Node js

javascript - NodeJS - 如何编写连接到 NodeJS 服务器并接收广播消息的客户端

rest - 这是对 ServiceStack 的每次调用进行无状态身份验证的正确方法吗?

javascript - 通过 PHP session 进行服务器身份验证

database - MongoLab _id 字段

node.js - 测试错误通过 Mocha 回调传回,应该

javascript - 在 nodeJs socket.io on 方法在 webstorm 中未解决

node.js - 将 req.user 传递给 graphQL