卡在 V2 OAuth 认证流程的第三步

问题描述

我已经创建了我的第一个机器人,现在我想提交到 Slack 应用程序目录。 正如 tutorial 所说,我应该创建一个端点,当用户批准我的应用程序时,Slack 可以到达该端点。 Slack 应该向我发送一个临时代码,然后我应该将其发送回他们的 OAuth API。这是相关的代码(顺便说一句,它是一个 nestJS 应用程序):

@Get()
auth(@Query('code') code: string) {
  const url = 'https://slack.com/apI/Oauth.v2.access';
  const message = {
    client_id: 'my.client.id',client_secret: 'my.client.secret',code: 'my.code'
  }
  return this.httpService.post(url,message);
}

但是,我收到以下错误

{
  "ok": false,"error": "invalid_arguments","response_Metadata": {
    "messages": [
      "[ERROR] missing required field: code"
    ]
  }
}

我做错了什么?

解决方法

安德里亚

当我查看该方法的 slack api 定义时:

https://api.slack.com/methods/oauth.v2.access

我注意到它说

Present arguments as parameters in application/x-www-form-urlencoded querystring or POST body. This method does not currently accept application/json.

您是否传递了对参数进行编码的标头或网址?

'Content-Type': 'application/x-www-form-urlencoded',

我问的原因是如果我在浏览器中访问这样的东西

https://slack.com/api/oauth.v2.access?client_id=00000&client_secret=11111&code=33333

我确实明白

{"ok":false,"error":"invalid_code"}

这是正确的,因为我在 url 参数列表中提供了一个代码 - 尽管代码无效。