【发布时间】:2019-06-13 20:24:02
【问题描述】:
我需要在 React Native 应用程序中支持经过身份验证和未经身份验证的 AppSync 请求。由于 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 配置?
【问题讨论】:
-
您看过这篇由亚马逊人撰写的文章吗?它涵盖了如何做到这一点(这是一个测试版):read.acloud.guru/…
-
@JeffBailey 该链接讨论了多环境功能(开发、阶段、生产)。我希望在同一个应用程序中实现未经身份验证和经过身份验证的访问。我需要知道如何在一个应用程序中提供多个 Apollo 配置文件。这是一个不同的问题。
-
@Fook 你是不是偶然发现了这个?
-
@AmieWilt 不是 100%。我使用这篇最近的帖子作为指导:github.com/aws-amplify/amplify-js/issues/…
-
但 AppSync API 确实允许您添加多种授权类型。为什么需要创建 2 个单独的 API?
标签: react-native apollo-client aws-appsync aws-amplify