无法使用axios接收monzo访问令牌

时间:2019-08-18 20:10:19

标签: reactjs axios httpie

我整天都在尝试使用axios在响应中执行发布请求(我正在尝试获取Monzo应用程序的access_token)。我已经按照here的说明进行了操作,当按照上述说明中的说明使用httpie命令行工具进行尝试时,它们可以正常工作。但是,当我尝试从我的React应用程序中使用它时,事情就变了。有关使用httpie的发帖请求如下:

http --form POST "https://api.monzo.com/oauth2/token" \
"grant_type=authorization_code" \
"client_id=my_client_id" \
"client_secret=my_client_secret" \
"redirect_uri=my_redirect_uri" \
"code=my_authorization_code"

这可以按预期工作,并返回一个包含我的access_token的JSON对象。

我在react应用中一直使用的(有问题的)axios命令是:

axios.post(
  "https://api.monzo.com/oauth2/token", {
    grant_type: "authorization_code",
    client_id: my_client_id,
    client_secret: my_client_secret,
    redirect_uri: my_redirect_uri,
    code: my_authorization_code
  })

我收到的错误消息是Failed to load resource: the server responded with a status of 400 ()

我发现this是一个非常相关的问题,这表明我添加了一个标头,指定了Content-Type: application/json,因此我将axios命令更改为:

axios({
  method: "POST",
  url: "https://api.monzo.com/oauth2/token",
  data: JSON.stringify({
    grant_type: "authorization_code",
    client_id: my_client_id,
    client_secret: my_client_secret,
    redirect_uri: my_redirect_uri,
    code: my_authorization_code
  }),
  headers: {
    'Content-Type': 'application/json'
  }
})

不幸的是,它给出了完全相同的错误。

有人可以给我一些指导吗?我对网络很陌生...谢谢!

1 个答案:

答案 0 :(得分:0)

这些事情通常都会发生,我在发布问题后不久就找到了答案。显然,“内容类型”需要以“ application / xxx-form-urlencoded”形式发送,并相应地转换数据,如下所示:

const queryString = require('query-string')

axios({
  method: "POST",
  url: "https://api.monzo.com/oauth2/token",
  data: queryString.stringify({grant_type: ...}),
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
})