如何解决Apollo 订阅 ngModule 事件循环麻烦与 Auth0
我们的项目和 Apollo Angular 中都有 Auth0 身份验证,当我们调用 常规 http 请求时,这一切都很好。
但是当我们试图用它拉订阅时,它搞砸了。
事情是这样的:
-
我们的 ngModule 设置了 graphQL 选项,也需要令牌。
-
如果我们在localStorage中有令牌,没问题。它正在工作!
-
如果我们没有令牌,我们必须从 auth0 获取它,它是可观察的并被推入事件循环队列。仅在 graphQL 选项设置为 go 后才获取令牌。
export function createApollo(httpLink: HttpLink,authService: AuthService): ApolloClientOptions<any> { const http = httpLink.create({ uri: environment.baseUrl + '/query' }); const wsClient = new SubscriptionClient(environment.webSocketUrl,{ reconnect: true,connectionParams: { Authorization: getToken() } }); function getToken() { let token = localStorage.getItem('id_token') if(token) { console.log('uto',uToken) return `${token}`; } else { this.authService.idTokenClaims$.subscribe((token: any) => { localStorage.setItem('id_token',token.__raw) token = token.__raw; }) return 'nothing' } } const ws = new WebSocketLink({ client: wsClient,uri: environment.webSocketUrl,//'ws://localhost:4000/subscriptions',options: { reconnect: true,connectionParams: { Authorization: getToken() } },}); const link = split( // split based on operation type ({query}) => { let deFinition = getMainDeFinition(query); return deFinition.kind === 'OperationDeFinition' && deFinition.operation === 'subscription'; },ws,http,); return { link,cache: new InMemoryCache(),defaultOptions: defaultOptions };
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。