我正在使用这种护照策略。
passport.use(
'onlyForRefreshToken',
new JWTStrategy(
{
jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
secretOrKey: jwtSecretRider,
},
(jwtPayload, done) => {
if (jwtPayload) {
return done(null, jwtPayload);
}
return done(null, false);
},
),
);
我的目标是将'jwtPayload'放入其他文件夹中的Nodejs的其余API中。
也就是说,我想使用在以下代码中解码的jwtPayload。
exports.riderRefreshToken = async (req, res) => {
const { email } = req.body;
const exRiderRefreshToken = await Rider.findOne({ email });
}
而且此路由器通过jwtstrategy的中间件工作。
router.post(
'/refreshToken',
passport.authenticate('onlyForRefreshToken', { session: false }),
authenticationCtrl.riderRefreshToken,
);
总而言之,当JWT从jwtstrategy顺利通过时,Post路由器将正常工作。
我想将jwtstrategy中的jwtPayload用作req.params或req.body。
您能帮我解决这个问题吗?
答案 0 :(得分:1)
您需要将策略包装到一个获得req
和res
的函数中:
const isAuthenticated: RequestHandler = (req, res, next) => {
passport.authenticate(
'jwt',
{ session: false, failWithError: true },
(error, user) => {
if (error) {
return next(error)
}
//HERE PUT USER WHERE YOU WANT
//req.data or req.user or req.userInfo
req.user = user
return next()
}
)(req, res, next)
}
我不建议将用户放到req.params
或req.body
中,因为以后可能会造成混淆(因为从技术上讲,它不是来自那些用户)。