我正在使用此护照策略。
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 用作 Nodejs API 作为 req.params 或 req.body。
你能帮我解决这个问题吗?
最佳答案
您需要将策略包装到一个获取 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
中,因为稍后可能会造成困惑(因为从技术上讲,它不是来自那些)。
关于node.js - 如何将Passport解码后的jwtPayload数据传递给nodejs API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56390470/