gpt4 book ai didi

node.js - 如何传递基于 Node js Passport 模块的身份验证回调函数的 HTTP 响应对象部分?

转载 作者:太空宇宙 更新时间:2023-11-04 03:08:47 25 4
gpt4 key购买 nike

我正在使用 Passport 模块来编写本地身份验证。最近,我开始使用响应对象在成功身份验证后将 userid 设置为 header 。令人惊讶的是,我意识到我的 Passport 代码没有采用 HTTP“响应”对象。以下是详细信息。

代码不起作用(回调函数只需要四个参数):

passport.use('local-login', new LocalStrategy({
usernameField: 'username',
passwordField: 'password',
passReqToCallback: true // allows us to pass back the entire request to the callback
},
function (req, res, username, password, done) {
log.debug("passport authenticateUser >> req >>"+req+", res >>"+res+", username "+username+", password "+password);
userService.authenticateUser(req, res, username, password, done);
}));

有效的代码

passport.use('local-login', new LocalStrategy({
usernameField: 'username',
passwordField: 'password',
passReqToCallback: true // allows us to pass back the entire request to the callback
},
function (req, username, password, done) {
log.debug("passport authenticateUser >> req >>"+req+", res >>"+res+", username "+username+", password "+password);
userService.authenticateUser(req, username, password, done);
}));

我还需要 HTTP“响应”对象。请帮忙

最佳答案

您可以通过 req 访问响应对象如req.res .

但是,我认为这不是您想要的,因为您的本地策略只会被您的“登录”路线调用;登录用户将访问的任何其他路由都不会调用它,因此不会设置您的 header 。

相反,您可以使用自定义中间件为登录用户发出的每个请求设置 header :

app.use(function(req, res, next) {
if (req.user) {
// Set the X-User-Id header to contain the user id. Obviously
// you should change this example to fit your situation.
res.set('X-User-Id', req.user.id);
}
next();
});

请确保将此路由添加到之后 app.use(passport.session())任何常规路线之前。

关于node.js - 如何传递基于 Node js Passport 模块的身份验证回调函数的 HTTP 响应对象部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31097312/

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