如何在处理其余请求之前验证 Firebase AuthToken

How to validate Firebase AuthToken before handling the rest of the request

我有一个 NodeJS 服务器,它接受包含 Firebase 令牌、phone 数字和文件的表单数据。 我正在使用 busboyexpress 从表单中获取数据。 代码如下所示:

    function validateAuthToken(authToken) {
        if (authToken) {
            admin.auth().verifyIdToken(authToken).then(function(decodedToken) {
            console.log("Verified auth token uid is:" + decodedToken.user_id);
                    return decodedToken;
                }).catch(function(error) {
                    console.log("Failed to verify authToken with error:" + error);
                });
            }
        }
    }


    app.post("/shout", function(req, res) {
        var busboy = new Busboy({ headers: req.headers });


        busboy.on('field', function(fieldName, value) {
            var decodedToken = null;
            var recPhone = null;
            switch (fieldName) {
                case constants.MSG_FORM_PART_AUTH_TOKEN:
                    decodedToken = validateAuthToken(value);
                    break;
                case constants.MSG_FORM_PART_RECIPIENT_PHONE:
                    //validate the phone number only if the token is valid
                    recPhone = validatePhoneNumber(decodedToken.phone_number, value);
                    break;
            }
        });

        busboy.on('file', function(fieldName, file) {
            shoutFileName = path.join(constants.SHOUT_FILES_PATH, shortid.generate());
            file.pipe(fs.createWriteStream(shoutFileName));
        });

        busboy.on('finish', function() {
            //save the file if the token is valid
        });

        return req.pipe(busboy);
    });

我的问题是我需要先完成令牌验证,然后才能验证 phone 号码或将文件保存到服务器。 verifyIdToken 使用 promise 来验证 Firebase 令牌,因此我不能对其使用 await。同时 busboy 继续解析请求的其余部分。 如何序列化流程?

我是否应该保存所有数据并仅在 busboy 完成事件发出后才开始验证?

在没有得到答案并与开发人员离线聊天后,我实施了 busboy 完成事件。

我首先将文件保存到 TMP 文件夹中。然后我验证了令牌,只有在获得验证结果后才继续将文件保存到永久位置。 这样做的缺点是,如果验证失败,我无法阻止保存大文件,但由于我以任何方式将文件限制为较小,因此这是一种更好的直接方法。