代码之家  ›  专栏  ›  技术社区  ›  rasilvap

如何在中间件中使用firebase数据库中的数据来对用户进行身份验证

  •  0
  • rasilvap  · 技术社区  · 5 年前

    我想做的是使用firebase数据库中的数据。我试图通过中间件实现这一点,但我做不到。我想知道这是不是最好的方法。这是我的代码:

    exports.userExist = function (req, res, next) {
      (async () => {
        try {
          var query = db
            .collection("users")
            .where("user", "==", req.query.user)
            .where("password", "==", req.query.password);
          query.get().then(function (querySnapshot) {
            if (querySnapshot.size > 0) {
              res.json(true);
              next();
            } else {
              res.json(false);
              next();
            }
          });
        } catch (error) {
          return res.status(500).send(error);
        }
      })();
    };
    

    我的疑问是,我如何从中间件中使用这种方法,我正在尝试这样做:

      function verifyUser(req, res, next) {
          let user= userController.findUser; //Hi have doubt about of how consume the middelware..
    
          if(user!=null){
           //The rest of the code.
          }
          next();
       }
    

    这是正确的方法吗?或者也许我试图实现这一目标是错误的?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Eric Guan    5 年前

    你的代码有几个问题。

    1. 中间件中不需要异步IIFE。中间件函数本身可以是异步函数。
    2. 如果你打电话 res.json() ,结束请求并发送响应。你可能不希望在这里有这种行为。
    exports.userExist = async function (req, res, next) {
        try {
          var query = db
            .collection("users")
            .where("user", "==", req.query.user)
            .where("password", "==", req.query.password);
    
          const querySnapshot = await query.get()
          if (querySnapshot.size > 0) {
            // assume the query only returns 1 user?
            req.userObj = querySnapshot.docs[0].data()
          }
          
          next();
        } catch (error) {
          return res.status(500).send(error);
        }
    };
    

    然后,在下游处理程序中:

      function verifyUser(req, res, next) {
          if (req.userObj) {
            // previous middleware found a user
          } else {
            // previous middleware did not find a user
          }
          next();
       }
    

    示例用法:

    app.use(userExist)
    app.use(verifyUser)