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 (将#修改为@)