如何使用护照 js 在 req.body 中添加用户?

How to add user in req.body using passport js?

没有护照,我添加了简单的中间件来授权用户,如下所示。

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,如何我们可以用 passport 中间件来做吗?

在护照上,这是通过 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)" 响应。