angular - Auth0 的 Apollo 订阅 ngModule 事件循环麻烦
问题描述
我们的项目和 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 };
}
解决方案
推荐阅读
- swift - 如何声明这样的按钮?
- android - Play 商店中开发者页面的 Flutter 插件
- flutter - 将自定义 Flutter DropDown 按钮创建为单独的小部件
- python-3.x - torch.einsum 如何执行这个 4D 张量乘法?
- sql - 插入值参考其他列
- report - NetSuite - 以 csv 格式导出报告
- java - 将 LongPredicate(或类似)声明为私有静态而不是非静态类变量时的任何并发问题
- angular - 在 Angular 应用程序中在哪里编写 UI 逻辑?
- azure-cosmosdb - 将数据加载到 Azure Cosmos DB (Mongo API)
- azure-devops - 无法使用 NuGet 上游源从 Azure DevOps Artifacts 源下载某些包