我有一个在配置 Redux 存储后立即运行的函数:
function configureApollo(store) {
return new AWSAppSyncClient({
url: AppSync.graphqlEndpoint,
region: AppSync.region,
auth: {
credentials: async () => {//...code that returns valid credentials}
}
})
}
我正在使用 react-cognito 来管理凭据,并将它们存储在 redux 商店中store.getState().cognito.creds
。我的问题是,当凭据过期并需要刷新时,react-cognito 会导出一个函数,该函数performLogin
返回一个“COGNITO_LOGIN”操作的承诺,该操作具有带有刷新凭据的有效负载。
我觉得我应该分派返回的操作并在更新后从商店中提取新凭据,但分派没有回调。
我想我可以从 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
})
...但这似乎是错误的。如果 reducer 将凭证保存到 store 中出现错误怎么办?然后我的 AWSAppSyncClient 的凭证与我的应用程序的其余部分不同步。
这里有更好的方法吗?