Как настроить Amplify для использования нескольких конечных точек AppSync? - PullRequest
0 голосов
/ 20 января 2019

Мне нужно поддерживать аутентифицированные и неаутентифицированные запросы 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 при запуске и событиях аутентификации?

...