首页 > 解决方案 > React 应用程序在通过 safari 访问时会抛出 401 错误,但其他情况下不会

问题描述

我有一个反应应用程序托管在云端分发后面的 s3 存储桶中。这与 django 服务器对话。登录在所有浏览器上都能正常工作(确认凭据正确,并且没有基本的连接问题)。登录后,应用程序会重定向到通过 fetch 执行简单 GET 请求的页面(到需要身份验证的 url)。这可以在桌面(macos)上的所有浏览器上成功运行,除了 safari,它会收到 401 未经授权的错误。同样,我在 iOS 上的每个浏览器上都收到 401 未经授权的错误。

我已经尝试刷新mac的DNS,但无济于事。我完全被难住了。如果它根本不起作用,那很好,但是除了 safari 之外的任何地方都可以工作吗?

获取代码:

  componentDidMount() {
    fetch(`${apiRoot}/info`, {
      method: "GET",
      headers: {
        Accept: "application/json",
        "Content-Type": "application/json",
        Authorization: `Token ${this.props.auth.token}`
      }
    })
      .then(response => response.json())
      .then(data => {
        this.setState({
          Name: data.name,
          Email: data.email
        });
      });
  }

标签: reactjsamazon-web-servicessafarimobile-safarifetch-api

解决方案


在获取 url 的末尾添加一个正斜杠:

fetch(`${apiRoot}/info/`, ...

Chrome 和 Firefox 似乎可以自己解决这个问题,但 Safari 却没有。


推荐阅读