Как проверить Firebase AuthToken перед обработкой остальной части запроса - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть сервер NodeJS, который принимает данные формы, которые включают в себя токен Firebase, номер телефона и файл.Я использую busboy и express, чтобы получить данные из формы.Код выглядит следующим образом:

    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);
    });

Моя проблема в том, что мне нужно закончить проверку токена, прежде чем я смогу проверить номер телефона или сохранить файл на сервере.verifyIdToken использует обещание для проверки токена Firebase, поэтому я не могу использовать await на нем.Тем временем busboy продолжает анализировать остальную часть запроса.Как мне сериализовать процесс?

Должен ли я сохранить все данные и начать проверку только после отправки события busboy finish?

...