如何在使用 passport.js 进行身份验证时从其余代码访问 Passport 'done' 函数?

How to access Passport 'done' function from rest of the code while authenticating using passport.js?

我正在尝试使用 passport.js 和 passport_jwt 策略在我的 API 中实施身份验证。代码附在下面

const JwtStrategy = require('passport-jwt').Strategy,
    ExtractJwt = require('passport-jwt').ExtractJwt;
const opts = {}
const User = require('../models/user_model')
const dotenv = require('dotenv')

module.exports = function(passport) {
    opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
    opts.secretOrKey = process.env.JWT_SECRET;

    passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
        User.findById(jwt_payload._id, function(err, user) {
            if (err) {
                return done(err, false);
            }
            if (user) {
                return done(null, user);
            } else {
                return done(null, false);
            }
        });
    }));
}

这里我已经通过 done 函数验证成功。对于我的 post 路由,我使用 passport.authenticate 作为路由中间件,如下所示。

app.use('/api/v1/posts', passport.authenticate('jwt', { session : false }), postRoutes)

现在的问题是如何在创建 post 路由时访问之前在 done 函数上发送的用户?非常感谢。

您可以在 postRoutes 方法中访问 user,代码如下:

exports.postRoutes = async (req, res) => {
    console.log('req.user =====>', req.user);
    res.status(200).send({ user: req.user })
};