Мой вопрос очень похож на этот , так как я пытаюсь обернуть метод 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