4

我知道中继可以在引导时注入网络层,如下所示:

Relay.injectNetworkLayer(
  new Relay.DefaultNetworkLayer('http://example.com/graphql', {
    headers: {
      Authorization: 'Basic SSdsbCBmaW5kIHNvbWV0aGluZyB0byBwdXQgaGVyZQ==',
    },
  })
);

但是如果我以后需要告诉标题是什么(比如在登录之后)呢?

4

3 回答 3

4

我发现了一个简单的技巧。您可以传入 headers 对象并更新其指针值。

const headers = {
    Authorization: '',
};

Relay.injectNetworkLayer(
  new Relay.DefaultNetworkLayer('http://example.com/graphql', {
    headers: headers,
  })
);

// To update the authorization, set the field.

headers.Authorization = 'Basic SSdsbCBmaW5kIHNvbWV0aGluZyB0byBwdXQgaGVyZQ=='
于 2016-09-24T21:50:46.490 回答
3

好问题。我想您正在基本组件文件中设置网络层。您可以创建一个包装 Relay.injectNetworkLayer 调用的函数,以便在需要时更新 Auth 标头。

加载应用程序时,您可以执行以下操作:

export function setNetworkLayer() {
  return new Promise((resolve, reject) => {

      var options = {};
      if (localStorage.authToken) {
        options.headers = {
          Authorization: 'Basic ' + localStorage.authToken
        }
      }
      else {
        options.headers = {};
      }
      Relay.injectNetworkLayer(
        new Relay.DefaultNetworkLayer('http://example.com/graphql', options)
      );
      resolve(options);
    });
  })
}

如果你想更新网络层,你会做这样的事情:

loginUser().then((res) => {
    localStorage.authToken = res.token;
    setNetworkLayer();
    return;
})
于 2016-06-14T17:37:11.537 回答
2

我在 github 中继 repo 中提出了这个问题,他们建议我使用这个react-relay-network-layer库来解决问题。我相信这将是解决问题的最佳选择。

于 2016-06-15T22:25:59.620 回答