【问题标题】:Authorization Token is not being received by Django server from ios - React nativeDjango服务器没有从ios接收到授权令牌 - React native
【发布时间】:2018-05-06 13:29:15
【问题描述】:

当我使用 Fetch(在 ios 中)从带有 Django 后端的 react 本机应用程序发出请求时,没有收到标头 Authorization Token,但其他标头是。

我尝试使用 nc -l 8090 来检查应用程序是否正确发送了标头并且它在那里。此外,这只是发生在 ios 版本中,android 版本工作得很好。

在检查 Django 后端时,没有收到授权令牌(我打印了 authentication.py 文件中的内容)

我把获取代码放在这里:

let response = fetch('http://xxx.xxx.x.xxx:8000/' + 'users', {
      method: 'GET',
      headers: {
        'content-type': 'application/json',
        'x-app-key': xxxxxxxxxx,
        'Authorization': 'Token xxxxxxxxxxxxxxxxxxxx' 
      }
    }).then((response) => {...}

我在响应中得到的错误消息是“403 django standard not valid authentication”。

我没有使用 OAuth2。任何其他可以提供的信息,请告诉我并感谢您的帮助。

我刚刚注意到的一件奇怪的事情是,当我在端口 8000 上使用 nc cmd (lc -l 8000) 时,它具有相同的行为。未收到授权令牌。

【问题讨论】:

  • 你修复了这个错误吗?

标签: ios django rest react-native


【解决方案1】:

我有一个使用 laravel 框架的后端的变体。我终于通过在公用文件夹的.htaccess文件中使用以下内容解决了它。

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

在我的案例中,结合另一个重要因素,在 fetch 中丢失了 url 的尾部斜杠。

希望这会有所帮助,无论哪种方式。祝你好运。

【讨论】:

    【解决方案2】:

    我解决了我的问题,在 URL 的末尾添加了一个斜杠。

    let response = fetch('http://xxx.xxx.x.xxx:8000/' + 'users/', {
          method: 'GET',
          headers: {
            'content-type': 'application/json',
            'x-app-key': xxxxxxxxxx,
            'Authorization': 'Token xxxxxxxxxxxxxxxxxxxx' 
          }
        }).then((response) => {...}

    【讨论】:

    • 有趣的是,最后没有斜线,它仅适用于 Android。使用斜线,它也适用于 iOS。这让我相信 Android 会为您添加斜线。
    • 我遇到了同样的问题,正在使用 Android 和 Flutter,但不是 iOS 原生的 Swift,直到我按照建议在 URL 末尾添加斜杠 /
    • 我在this 方向上走了这么多:/ 正在为此苦苦挣扎,非常感谢!!!
    猜你喜欢
    • 2021-07-28
    • 2021-10-02
    • 2020-04-08
    • 2015-05-04
    • 2020-05-09
    • 2022-10-23
    • 2015-08-01
    • 2017-08-28
    • 2014-07-09
    相关资源
    最近更新 更多