Мне нужно поддерживать аутентифицированные и неаутентифицированные запросы AppSync в приложении React Native.Поскольку AppSync допускает только один тип авторизации для API, я настраиваю два API: один для аутентифицированных пользователей (пулы пользователей Cognito) и один для гостей (ключ API).
Я думаю, чтобы эта работа мне нужнаиметь два разных AWSAppSyncClient
конфига в одном приложении.
// authenticated user
const appSyncAuthenticatedClient = new AWSAppSyncClient({
url: Config.APPSYNC_AUTHENTICATED_ENDPOINT,
region: Config.APPSYNC_REGION,
auth: {
type: 'AMAZON_COGNITO_USER_POOLS',
jwtToken: async () =>
(await Auth.currentSession()).getAccessToken().getJwtToken()
}
});
// guest
const appSyncUnauthenticatedClient = new AWSAppSyncClient({
url: Config.APPSYNC_UNAUTHENTICATED_ENDPOINT,
region: Config.APPSYNC_REGION,
auth: {
type: 'API_KEY',
apiKey: Config.APPSYNC_API_ID
}
});
и затем определить, какой использовать, основываясь на том, вошли ли они в систему или нет
Auth.currentAuthenticatedUser()
.then(user => this.appSyncRunningClient = appSyncAuthenticatedClient)
.catch(err => this.appSyncRunningClient = appSyncUnauthenticatedClient);
const App = props => {
return (
<ApolloProvider client={this.appSyncRunningClient}>
<Rehydrated>
<RootStack/>
</Root>
</Rehydrated>
</ApolloProvider>
);
};
export default App;
Это не удается, потому что currentAuthenticatedUser
возвращает обещание, и я застрял на том, какчтобы решить обещание на этом высшем уровне реализации приложения.Мне также нужно будет поменять эту конфигурацию во время событий аутентификации.
Каким образом я могу динамически выбирать и изменять конфигурацию ApolloProvider
при запуске и событиях аутентификации?