0

如何在实例化的 apollo-client 实例中在运行时更新令牌?

const middleware = new ApolloLink((operation, forward) => {
    operation.setContext({
        headers: new HttpHeaders().set('Authorization', 'Bearer ' + token || null)});
        return forward(operation);
    });


apollo.createNamed(id, {
    link: from([logoutLink, middleware, http]),
    cache: new InMemoryCache(),
});

apollo 实例有一个 link 属性,它本身就是一个 ApolloLink 实例,它有 concat 方法。

apollo.getclient().link.concat()

但是调用那个 concat 会返回一个新的 ApolloLink 实例。有没有办法用这个新的 ApolloLink 更新客户端实例?

4

1 回答 1

2

您不需要创建一个新的ApolloLink- 您将一个函数传递给ApolloLink' 的构造函数,该构造函数在每次发出请求时都会运行,因此只需在函数内部处理该逻辑:

const middleware = new ApolloLink((operation, forward) => {
  const headers = new HttpHeaders()
  const token = getTokenFromWherever()
  headers.set('Authorization', 'Bearer ' + token)
  operation.setContext({ header })
})
于 2018-12-20T16:17:55.693 回答