如何使用fetch()和React Native处理set-cookie标头

时间:2018-04-06 15:28:39

标签: react-native cookies fetch expo

我有带有基于cookie的身份验证和会话管理的spring boot应用程序。 对于第一个请求,我将cookie名称和会话哈希值作为值。

另一方面,我有React Native应用程序包裹着Expo。 对于有史以来的第一个请求,我可以从fetch()请求获得这个'set-cookie'标头。然后,即使重新启动应用程序,我也无法获得此标题。

我使用React Native Debugger并使用以下代码行调试它:

GLOBAL.XMLHttpRequest = GLOBAL.originalXMLHttpRequest || GLOBAL.XMLHttpRequest;

我可以在调试器的网络选项卡上看到我的XHR请求。清理完所有cookie后,每次我在请求预览中都收到正确的set-cookie标头。但我无法用fetch(...)看到它。然后(response => response.headers)。

为什么呢?这是持久的我的饼干?如何在没有插件/库的情况下处理cookie数据并将其保存到AsyncStorage?

2 个答案:

答案 0 :(得分:2)

请参阅here

  

使用提取请求发送凭证

     

您是否希望使用诸如的凭据进行获取请求   您应该将请求的凭据设置为“包含”。

fetch(url, {
  credentials: 'include'
})

答案 1 :(得分:0)

解决方案:

如果您在React Native Debugger中启用了 Network Inspect ,请将其关闭。右键单击Redux区域上的任意位置,然后按Disable Network Inspect

enter image description here

注意:

我知道这是很多年后的事,但是我发现罪魁祸首是React Native Debugger。如果您启用了网络检查,则会删除set-cookie标头,从而使您不确定。

请注意,我正在使用Axios版本0.20.0,并在带有React Native Debugger 0.11.5的React Native 0.63.3上的POST配置中将withCredentials设置为true。我知道这不是一件难事,但那可能是那些年前困扰您的一切。您开始使用RND进行检查时,您的set-cookie就消失了。

现在的解决方案是禁用“网络检查”,然后您将再次获得set-cookie

React Native Debugger于2019年打开了一个错误,作者提到这是一个不易克服的限制。

如果您有兴趣,请在这里阅读更多信息:

https://github.com/jhen0409/react-native-debugger/issues/340#issuecomment-514395195