При ожидании обещания в результате adminuserglobalsignout обещание, кажется, возвращается, но данные ничего не содержат.
Следующий вызов после выхода из системы - аутентификация пользователя.возвращается правильный accessToken, но он уже отозван, что заставляет меня думать, что обещание не ожидает корректно, а новые учетные данные подписываются предыдущим вызовом, который все еще выполняется.
Мы используем globalsignout, чтобы запретить пользователям иметьнесколько сессий, поэтому рабочий процесс идет по линиям
authenticate -> success -> signout (чтобы завершить любые другие сеансы) -> authenticate -> success -> return token
Я обновил свою лямбдупакет для включения последней версии SDK 2.469.0 и без улучшений.
Иногда время должно быть в порядке, так как возвращенные учетные данные все еще действительны и токен может использоваться.
В ОБА случаяхпохоже, что нулевые данные возвращаются из секции AWS call
лямбда-кода, который вызывает метод выхода из библиотеки User
try {
signOutResult = await User.globalSignOut(userId, process.env.COGNITO_POOL);
} catch (err) {
log.error("AWS Global Signout Error: " + JSON.stringify(err));
responseBody = Helper.buildCORSResponse(502, JSON.stringify({ message: err }));
return callback(null, responseBody);
}
globalsignout code в библиотеке User:
return new Promise((resolve, reject) => {
log.info(`globalSignOut: Signing ${Username} out from all devices in pool ${UserPoolId}`);
const signOutRequest = new AWS.CognitoIdentityServiceProvider({ apiVersion: "2016-04-18" }).adminUserGlobalSignOut({ Username, UserPoolId });
const signOutPromise = signOutRequest.promise();
signOutPromise.
then((data) => {
log.debug("globalSignOut: Cognito SignOut Success: " + JSON.stringify(data));
resolve(data);
}).catch((err) => {
log.error("globalSignOut: Cognito SignOut Error: " + err);
reject(err);
});
});
}
При каждом вызове мы достигаем разрешения без проблем, а затем продолжаем аутентифицироватьОн снова пользователь.
log.debug("globalSignOut: Cognito SignOut Success: " + JSON.stringify(data));
resolve(data);
Кто-нибудь видит какие-либо проблемы, которые могут быть причиной этого?Я попробовал несколько способов указать обещание и использовать тот же формат, который отлично работает для других служб и ждет обещания результата, прежде чем будет продолжено выполнение кода.
Весь совет очень ценится