У меня есть функция, которая запускается сразу после настройки хранилища Redux:
function configureApollo(store) {
return new AWSAppSyncClient({
url: AppSync.graphqlEndpoint,
region: AppSync.region,
auth: {
credentials: async () => {//...code that returns valid credentials}
}
})
}
Я использую реагирующее-когнито для управления учетными данными, и оно хранит их в хранилище избыточностей под store.getState().cognito.creds
. Моя проблема заключается в том, что когда срок действия учетных данных истек и их необходимо обновить, реакция-cognito экспортирует функцию performLogin
, которая возвращает обещание для действия "COGNITO_LOGIN", которое имеет полезную нагрузку с обновленными учетными данными.
Я чувствую, что должен отправить возвращенное действие и получить новые учетные данные из хранилища после его обновления, но отправка не имеет обратного вызова.
Я думаю, что могу читать учетные данные из действия COGNITO_LOGIN, отправлять действие и никогда не беспокоиться о считывании учетных данных из store.getState()
const resultAction = await performLogin(user, config, group);
store.dispatch(resultAction);
return new AWSCredentials(
{
accessKeyId: resultAction.creds.accessKeyId,
secretAccessKey: resultAction.creds.secretAccessKey,
sessionToken: resultAction.creds.sessionToken
})
... но это кажется неправильным. Что если в редукторе произошла ошибка при сохранении учетных данных в хранилище? Тогда у моего AWSAppSyncClient есть учетные данные, которые не синхронизированы с остальной частью моего приложения.
Есть ли лучший подход здесь?