【问题标题】:iOS React Native fetch with redirect to custom url scheme fails with `Network request failed` error带有重定向到自定义 url 方案的 iOS React Native 获取失败并出现“网络请求失败”错误
【发布时间】:2021-07-25 20:07:51
【问题描述】:

在我当前的 react native 项目中,我们在 oidc 之上构建了身份验证流程。 它在执行用户身份验证时使用多个重定向。 这些重定向是针对其中包含一些身份验证数据的 url。 这是一些存根示例:

fetch('https://my-auth-server.domain/address') -> 302 ('myappid://action?user=data') 

如您所见,服务器将初始请求重定向到自定义 url 方案。还有一个问题: (我想)由于这个自定义 url 方案,我没有收到响应,但只有“不支持的 URL”XHR 错误。没有标题,我可以从中解析重定向位置,什么都没有。就是这个错误文本。

真的可以通过 React Native fetch / XHR 处理自定义 url 方案重定向吗?

环境:

  • React Native 0.64
  • iOS 12.1-14.4
  • 反应导航 v4
  • XCode 12.5

我已经做过的事情:

  • 我在应用中设置了深度链接,并设置了 URL 方案。
  • 我已将 Allow Arbitrary Loads 设置为 true 并配置了域。
  • 我尝试使用纯 XHR 请求、axios、fetch - 结果始终相同。
  • 在模拟器的 Safari 和桌面浏览器中,初始 URL 可以正常打开。
  • React Flipper 还会显示来自该请求的响应以及所有数据! (状态:302,所有标题都到位等)

也没有办法拦截这个重定向,因为 React Native 的 fetch 不支持 { redirect: "manual" } 选项。

【问题讨论】:

  • 无赖,我也遇到了同样的问题。
  • 完全是无赖,我非常同意你的看法。我正在寻找的唯一可能的解决方案是使用 WebView 来处理此身份验证链。但我所做的这些更改的全部目的是不再使用 WebView >.
  • 我希望运行一个后端服务器来在后台进行身份验证。如果您愿意,我们可以离线讨论,如果成功,我们可以在这里发布我们正在做的事情作为答案。
  • 这似乎也是可能的解决方案。您可以通过电子邮件 tollemet@gmail.com 与我联系以进行进一步讨论。

标签: ios react-native xmlhttprequest fetch


【解决方案1】:

iOS 的 URLSession 不知道如何处理您的自定义 url 架构。 RN 会引发网络错误,但如果您使用 xcode 进行调试,您将看到更多信息,如下所示: Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL"。 您需要为您的自定义模式 (myappid://action?user=data) 编写自己的处理程序。 有用的话题: https://developer.apple.com/forums/thread/656308 - 第一条评论 Custom URI Scheme "Unsupported URL" Unsupported URL when app receives a redirect to itself

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2016-03-02
  • 2022-09-24
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多