Node.js中间件可读取多个猫鼬集合

时间:2020-08-14 22:53:47

标签: node.js express mongoose passport.js

我不熟悉使用node.js进行身份验证,并且正在努力实现以下目标:

我目前有一个中间件功能,该功能检查与请求一起发送的访问令牌,并拉出与该令牌相关的用户,然后将该用户追加到请求中,以便我可以使用其详细信息。这对于我的Users集合来说完全可以正常工作,但是我想为完全不同类型的用户添加一个名为Owners的新集合。

基于我当前拥有的功能,我似乎找不到一种方法来检查两个集合-这是我当前的功能,可以与我的一个Users集合一起使用。

//
// Middleware that authenticates token and appends user to request
//
module.exports.required = function (req, res, next) {
  const auth_header = req.header("authorization").split(" ");
  const auth_type = auth_header[0];
  const auth_token = auth_header[1] || null;

  // Check token
  if (auth_type !== "Bearer" || !auth_token) {
    return next(HttpError(401, "Token is invalid."));
  }

  // Find user matching access token
  return User.findOne({ access_token: auth_token })
    .orFail(HttpError(401, "Token does not exist."))
    .then((user) => {
      try {
        // Check if token has no expired
        decodeToken(auth_token);
      } catch (err) {
        if (err.name !== "TokenExpiredError") return next(err);

        // Refresh token
        user.generateAccessToken();

        // Save and return new user
        return user.save();
      }

      return user;
    })
    .then((user) => {
      // Append user object to the incoming request
      req.user = user;
      return next();
    })
    .catch(next);
};

任何人都可以帮助我了解如何检查两个集合(用户和所有者)吗?

0 个答案:

没有答案