问题描述
我们的项目和 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 (将#修改为@)