react-native fetch() cookie 持久化

Posted

技术标签:

【中文标题】react-native fetch() cookie 持久化【英文标题】:react-native fetch() cookie persist 【发布时间】:2017-04-29 04:01:00 【问题描述】:

我不熟悉在 javascript 中使用 react-native 和 fetch api。我使用后端验证了我的应用程序,在我的 ios 模拟器中多次刷新后,应用程序检查它是否在初始加载时通过后端验证,令我惊讶的是,它是!这就引出了一个问题,即在 react-native 和 fetch api 中持续存在的位置和内容?

谢谢!

【问题讨论】:

除非您使用 AsyncStorage,否则没有任何东西应该持久化 @matt 这是一个简单的 react-native 应用程序。我没有使用 AsyncStorage。这可能是开发环境功能吗? 所以你要持有令牌? 我确实希望它持续存在,但我想了解为什么它目前在没有任何配置的情况下这样做。 我遇到了同样的问题,最后不得不使用 AsyncStorage 来保存令牌和 cookie,还使用 ​​react-native-cookies 清除所有 cookie。例如:CookieManager.cearAll() 【参考方案1】:

fetch on React Native 是在原生级 API 之上实现的,与 whatwg specification 和众所周知的 github polyfill 略有不同。这意味着当发出实际的 HTTP 请求时,它是由 iOS 上的本机网络堆栈或 android 上的 OkHttp3 发出的,并且在每种情况下,它都是底层的 ObjC 或 Java 代码处理和存储 cookie,远离您的 JS代码。

在 2015 年 11 月的 this commit 之前,Cookie 根本无法在 Android 上正确保留,但自 RN 0.16 起,无论您的 fetch 调用中的 credential 设置如何,它们都在两个平台上都受支持。因此,会话 cookie 等开箱即用,如果您不期望任何东西被持久化,这可能会令人不安。如果您需要从 JS 中操作 cookie,请查看 react-native-cookies,它与底层 cookie 存储交互。

【讨论】:

感谢您提供此信息!既然你说fetch 应该开箱即用,你能想到一个场景,它会出于某种原因使用NSHTTPCookieStorage? (我已经登录了我的应用程序的本机部分,我希望能够在 RN 部分中使用需要身份验证的请求) 我真的不太了解NSHTTPCookieStorage 或 RN 的 cookie 实现,但我怀疑如果您已登录,还需要做额外的工作来访问 cookie通过本机代码。 实际上我设法让它工作了——我唯一要做的就是更新 react 和 react-native 以及相应的 Pod。然后,cookie 开箱即用。还是谢谢! 除了 react-native-cookies 之外,还有没有像 credentials: 'omit' 这样简单的方法来删除 cookie 一次获取? 我无法在 android 的 fetch api 的响应标头中获取“set-cookie”参数。在 ios 我第一次得到它。每次我登录 android 和 ios 时如何获取“set-cookie”。我曾经通过将 setHTTPShouldHandleCookies 设置为 NO 在本机 ios 中实现这一点。提前致谢【参考方案2】:

我遇到了同样的问题,最后不得不使用 AsyncStorage 来保存令牌和 cookie,还使用 ​​react-native-cookies 来清除所有 cookie。例如:CookieManager.cearAll()

【讨论】:

这必须是评论

以上是关于react-native fetch() cookie 持久化的主要内容,如果未能解决你的问题,请参考以下文章

fetch() 在 react-native (iOS) 上做 GET 而不是 POST

react-native——fetch

react-native fetch 返回状态码 + json

react-native android fetch json停止工作

如何显示从 fetch() 方法返回的图像 - react-native

如何在带有 Jest 的 react-native 中使用模拟的 fetch() 对 API 调用进行单元测试