AWS Cognito возвращает неопределенную ошибку async / await - PullRequest
0 голосов
/ 14 декабря 2018

Мой вопрос очень похож на этот , так как я пытаюсь обернуть метод authenticateUser SDK в Promise и разрешить / отклонить его.

Код:

async function cognitoAuth(credentials, next, res) {
    const userData = {
        Username: credentials.email,
        Pool: userPool
    };
    const authenticationDetails = getAuthenticationDetails(credentials);

    let userCredentials;
    let authenticatedUserResponse;

    cognitoUser = new CognitoUser(userData);

    try {
        userCredentials = await checkIfAuthenticated(credentials.email);

        if (userCredentials.UserStatus === CognitoUserStatus.FORCE_CHANGE_PASSWORD) {
            res
                .status(203)
                .send(userCredentials);
        } else if (userCredentials.UserStatus === CognitoUserStatus.CONFIRMED) {
            authenticatedUserResponse = await authenticateUser(authenticationDetails);

            console.log(authenticatedUserResponse);
        }
    } catch(err) {
        if (err.message === CognitoErrorMessages.USER_NOT_EXIST) {
            next({
                name: err.message,
                status: 404
            });
        }
    }
}

Как видите, у меня есть две ожидаемые функции (checkIfAuthenticated и authenticateUser) .Если checkIfAuthenticated выдает ошибку и отклоняет обещание, то catch в порядке с действительным err объектом.

Однако, если authenticateUser выдает ошибку, catch вызываетсяно err не определено.

Это мое authenticateUser:

function authenticateUser(authenticationDetails) {
    return new Promise((resolve, reject) => {
        cognitoUser.authenticateUser(authenticationDetails, {
            onSuccess: (result) => {
                resolve(merge(err, {
                    res: "SUCCESS"
                }));
            },
            onFailure: (err) => {
                reject(merge(err, {
                    status: 401
                }));
            },
            newPasswordRequired: (userAttrs, requiredAttrs) => {
                resolve(merge(userAttrs, {
                    res: "NEW_PASS_REQ"
                }));
            }
        });
    });
}

При использовании точек останова вызывается onFailure, и это правильный объект ошибки, поэтому я не уверен относительнопочему оно не определено в catch

1 Ответ

0 голосов
/ 14 декабря 2018

Разобрался.Один из моих коллег отметил, что я запускаю babel над кодом своего сервера, имея это в моем index.js (моей точке входа для сервера) :

require("@babel/polyfill");
require("@babel/register");

Проблема с трансплантацией вУзел.Как только я снял это и переключился на импорт / экспорт ES5, он работал нормально

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...