gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 23:51:43 26 4
gpt4 key购买 nike

用户从另一个应用程序使用以这种形式生成的链接访问我的网络路由:/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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com