如何使用护照 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 中添加用户?的主要内容,如果未能解决你的问题,请参考以下文章

使用护照注册时的错误请求

Node.js:req.params 与 req.body

使用 http 时,req.body 为空 。在 angular 和 node.js 中发布

Req.body 在 node.js 中不可迭代

如何在快递请求期间更改 req.body

如何使用 Busboy 访问 Express 4 req.body 对象