如何使用护照 js 在 req.body 中添加用户?
Posted
技术标签:
【中文标题】如何使用护照 js 在 req.body 中添加用户?【英文标题】:How to add user in req.body using passport js? 【发布时间】:2021-08-08 03:53:12 【问题描述】:没有护照,我添加了简单的中间件来授权用户,如下所示。
const jwt = require('jsonwebtoken');
module.exports = (req, res, next) =>
const authHeader = req.get('Authorization');
const token = authHeader.split(' ')[1];
let jwttoken;
try
jwttoken = jwt.verify(token, 'secret');
catch (err)
err.statusCode = 500;
throw err;
if (!jwttoken)
const error = new Error('Not authenticated.');
error.statusCode = 401;
throw error;
req.userId = jwttoken.userId;
next();
;
使用护照,我添加了如下中间件
const options =
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: 'SECRET'
module.exports = (passport) =>
passport.use(new Strategy(options, async (payload, done) =>
await user.findByPk(payload.userId).then(user =>
if (user)
return done(null, user);
return done(null, false);
).catch(error =>
return done(null, error);
);
));
问题:就像我将用户添加到没有护照的请求中一样 req.userId = jwttoken.userId,我们如何使用护照中间件来做到这一点?
【问题讨论】:
【参考方案1】:在护照上,这是通过你的 module.exports 上的那一行代码完成的:
return done(null, user);
这告诉passport该信息应该被发送到req.user的下一个函数回调。
例如,如果您 "user.findByPk(payload.userId)" 响应类似于:
"name": <NAME>
"profile": <profile>
在受保护端点的回调中,您应该在 req.user 上看到它。 For example:
app.post('/profile', passport.authenticate('jwt', session: false ),
function(req, res)
res.send(req.user.profile);
);
req.user.profile 等于 "user.findByPk(payload.userId)" 响应。
【讨论】:
以上是关于如何使用护照 js 在 req.body 中添加用户?的主要内容,如果未能解决你的问题,请参考以下文章