【问题标题】:I receive a 401 error from the server when trying to authenticate a user in my React Native app on Android尝试在 Android 上的 React Native 应用程序中对用户进行身份验证时,我从服务器收到 401 错误
【发布时间】:2020-03-28 02:40:46
【问题描述】:

我在标题中描述了我的问题。

一些附加信息:

0) 当我在 React Native 调试器中启用 Network Inspect 时,一切正常,我没有遇到这样的问题。

1) 我将 expo 用于我的应用程序。

2) 我在 Android 模拟器 (android v. 10) 和真正的 android 设备 (android v. 7) 上检查了问题 - 结果是一样的。

3) iOS 模拟器不再出现该问题。

4) 我正在尝试向远程服务器 https://.../client/authorize 发出 GET 请求,并在 Authorization: Bearer 标头中传递带有用户电子邮件地址的 JWT。

5) 我使用axios 库来处理请求,但是当我使用本机fetch 时,我遇到了同样的问题。

6) Expo 版本为 35.0.0

7) 当我在 React Native 调试器中禁用网络检查时,Android 设备上的授权问题又回来了。

提前感谢您的回答。

【问题讨论】:

  • 当您收到来自 /authorize 调用的响应时,您确定您收到的是有效的 JWT 吗?你能console.log吗?如果是这样,它有效吗?使用 jwt.io 验证 JWT 并检查其内容。最好了解 iOS 模拟器和 Android 模拟器之间是否存在差异。
  • 那个 https 服务器是什么?这是您的还是第三方身份验证服务提供商?
  • @TelmoDias 是的,jwt 对于 Android 和 iOS 都是一样的。
  • @DRich 这是我客户的服务器。我制作了 react-native 应用程序,他为我提供了后端。
  • @JustAUser 你可以尝试在没有 React Native Debugger 的情况下运行应用程序吗?问题是否仍然存在?也许这与您使用的特定工具和 Expo 版本有关。我通常通过 Chrome 开发工具进行调试。

标签: javascript android react-native expo


【解决方案1】:

您可能必须与后端的所有者坐下来才能弄清楚这一点。如果服务器由另一个服务托管,它会变得更加复杂。

不久前我也遇到过类似的问题:CloudFlare (Memberful) post requests from Java produce a 403 error

在我的情况下,找出导致问题的代理值非常棘手,因为我无法与服务器所有者坐下来。我要做的是使用 Fiddler 和 Wireshark 来比较正在发送的请求,找出差异,然后使用 Advanced REST Client (ARC) 逐一尝试。

这很乏味,但我不得不这样做。但是,如果您可以与服务器所有者坐在一起,他们应该能够告诉您他们正在接收什么以及这些请求的哪些元素导致了问题。他们可能需要最终更改一些配置。

希望这会有所帮助,祝你好运!

【讨论】:

  • 感谢您的回答。当然,我会和后端的所有者坐下来讨论这个问题。但是为什么在 React Native Debugger 中启用 Network Inspect 可以解决问题呢?
  • 我希望我能告诉你。当然,启用 Network Inspect 必须更改发送到服务器的内容,但我不能告诉你它是什么。如果这就像我遇到的问题,那么可能是 Network Inspect 拦截了请求,然后使用不同的 User-agent 值重新发送它们。当然,它也可以在更改任何其他参数的情况下重新发送它们。您必须看看在 Network Inspect 开启和关闭时请求看起来有何不同。
猜你喜欢
  • 1970-01-01
  • 2011-06-05
  • 2017-03-28
  • 2020-01-06
  • 2018-10-09
  • 2016-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
相关资源
最近更新 更多