【问题标题】:Why is this axios put request not setting the headers peoperly为什么这个 axios put 请求没有正确设置标头
【发布时间】:2020-04-19 17:05:50
【问题描述】:

所以,我正在编写一个不和谐的机器人,它基本上连接了我为一大堆不同命令制作的 API。不幸的是,我被困在这个单一的请求上,并且我已经查明了错误。 请求似乎没有发送我在标头中设置的身份验证密钥。我检查了 API 日志,但身份验证中间件拒绝了该请求,因为没有提供密钥。我将不胜感激。

  • 这是在异步函数中
  • 所有其他请求都有效,实际上我从以前的有效请求中复制并粘贴了此标头
  • 此请求不需要正文
  • 如果这有点相关:这是在 collector.on('collect', async () => {HERE}) 中。
let updatedUser = await axios.put(
                            `https://API-URL-GOES-HERE/api/users/${username}/loaChange`,
                            {
                                headers: {
                                    auth:
                                        'AUTH-KEY-GOES-HERE'
                                }
                            }
                        );

收到失败的标头:

{
   host: 'API-URL-HERE.herokuapp.com',
   connection: 'close',
   accept: 'application/json, text/plain, */*',
   'content-type': 'application/json;charset=utf-8',
   'user-agent': 'axios/0.19.0',
   'x-request-id': 'REQID',
   'x-forwarded-for': 'IPADRESS',
   'x-forwarded-proto': 'https',
   'x-forwarded-port': '443',
   via: '1.1 vegur',
   'connect-time': '2',
   'x-request-start': '1577766826940',
   'total-route-time': '5',
   'content-length': '194'
 }

之前的成功请求:

let initialUser = await axios.get(
                        `https://API-URL-GOES-HERE/api/users/${username}`,
                        {
                            headers: {
                                auth:
                                    'AUTH-KEY-GOES-HERE'
                            }
                        }
                    );

从成功中收到的标头:

{
host: 'API-URL-HERE.herokuapp.com',
  connection: 'close',
   accept: 'application/json, text/plain, */*', 
  auth: 'AUTH-KEY-HERE',
   'user-agent': 'axios/0.19.0',
   'x-request-id': 'REQID',
   'x-forwarded-for': 'IPADDRESS',
  'x-forwarded-proto': 'https',
 'x-forwarded-port': '443',
   via: '1.1 vegur',
   'connect-time': '0',
   'x-request-start': '1577766773203',
   'total-route-time': '0'
 }

注意:这不是使用常规身份验证请求的格式,只是将其视为未通过的标头对象

【问题讨论】:

  • 请从实际成功的请求中捕获请求标头(在您拥有的其他代码中)。然后捕获这个 axios 请求发送的内容。在我们帮助您编写 axios 代码来发送它之前,我们需要准确地查看标题应该是什么。另外,您是从浏览器发送的吗?如果是这样,您可能会遇到跨源问题,因为自定义标头会触发额外的跨源检查,例如 OPTIONS 请求以预检您的目标可能支持也可能不支持的请求。
  • @jfriend00 我更新了帖子。感谢您的回复!它不是来自浏览器,而是来自使用 heroku 运行的不和谐机器人的请求。
  • 不知是否需要axios选项withCredentials: true

标签: javascript node.js axios discord.js put


【解决方案1】:

axios.get()axios.put() 没有相同的参数,但您尝试对两者使用相同的参数。

axios.get(url[, config])
axios.put(url[, data[, config]])

即使您的.put() 没有任何data,您也必须在第二个参数位置放置一些内容,因为没有它,axios 会将您的配置对象作为数据而不是将其用作配置这可能是自定义标头未按预期设置的原因。

【讨论】:

    【解决方案2】:

    试试这个,让我知道它是否有效。

    { headers: {"Authorization" : `Bearer ${AUTH-KEY-GOES-HERE}`} }
    

    注意:确保您的服务器已设置好,以便它使用 Access-Control-Allow-Headers: Authorization 标头响应该 URL 的 OPTIONS 请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 2020-05-29
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      相关资源
      最近更新 更多