微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Apollo 订阅 ngModule 事件循环麻烦与 Auth0

如何解决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 举报,一经查实,本站将立刻删除。