gpt4 book ai didi

jwt - 使用 Passport-jwt 和尾声,我的 req.user 为空

转载 作者:行者123 更新时间:2023-12-02 13:28:19 25 4
gpt4 key购买 nike

我的中间件代码是:

exports.isAuthenticated = (req, res, context) => {
return new Promise((resolve, reject) => {
return passport.authenticate('jwt',{session: false}, (err, user, info) => {
if(err) {
res.status(500).send({message: 'Internal Server Error'})
return resolve(context.stop);
}

if(user) {
return resolve(context.continue);
} else {
res.status(401).send({message: 'Unauthorized'})

return resolve(context.stop)
}
})(req, res);
});
}

我的尾声代码是:

// Data plan REST API
const dataplan = epilogue.resource({
model: global.db.DataPlan,
endpoints: ['/api/dataplan', '/api/dataplan/:id']
});

dataplan.all.auth(middleware.isAuthenticated)
dataplan.use(require('./epilogue/dataplan.js'))

我的 dataplan.js 是:

module.exports = {
list: {
auth: async function (req, res, context) {
console.log(req.user)
return context.continue
},
send: {
....

但是我的 req.user 在我的 list.auth 中是空的。我做错了什么?

最佳答案

TL;DR

如果您提供回调,

passport.authenticate 不会设置 req.user。您必须自己设置。

解决方案

我能够重现您的案例,并且行为按预期显示。

为了修复它,我必须像这样更新您的身份验证中间件:

exports.isAuthenticated = (req, res, context) => {
return new Promise((resolve, reject) => {
return passport.authenticate('jwt',{session: false}, (err, user, info) => {
if(err) {
res.status(500).send({message: 'Internal Server Error'})
return resolve(context.stop);
}

if(user) {
req.user = user; // Manually set the user in req
return resolve(context.continue);
} else {
res.status(401).send({message: 'Unauthorized'})

return resolve(context.stop)
}
})(req, res);
});
}

当身份验证成功时,我手动将user分配给req.user。这正确解决了问题。

为什么会发生这种情况?

通过查看passport source code我注意到,如果用户自己提供回调,passport.authenticate 函数将自行短路。
这意味着您必须自己设置该值。

关于jwt - 使用 Passport-jwt 和尾声,我的 req.user 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50394419/

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