我知道,如下所述,中继可以注入网络层:
Relay.injectNetworkLayer(
new Relay.DefaultNetworkLayer('http://example.com/graphql', {
headers: {
Authorization: 'Basic SSdsbCBmaW5kIHNvbWV0aGluZyB0byBwdXQgaGVyZQ==',
},
})
);
但是如果我需要稍后告诉标题是什么(比如登录后)呢?
答案 0 :(得分: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=='
答案 1 :(得分: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;
})
答案 2 :(得分:2)
我在github relay repo中问了这个问题,他们建议我使用这个react-relay-network-layer库来解决问题。我相信这将是解决问题的最佳选择。