【发布时间】:2017-01-25 14:21:30
【问题描述】:
我正在为我的 Ruby on Rails 应用程序构建 Slack 集成,当用户单击“添加到 Slack”按钮时,我正在尝试从 Slack API 为我的 Slack 应用程序获取 access_token。
通过 Postman,我可以成功发布以下内容:
https://slack.com/api/oauth.access?client_id=idgoes.here&client_secret=secretgoeshere&code=12345&pretty=1
但是,在 Rails 中,无论我调用 API 的方式如何,我总是会收到带有 invalid_client_id 的响应。我已经检查了我的 ID 是否正确(很多)并尝试重新生成它,但由于邮递员的成功,我认为这不是问题。
在我的 get_oauth_access_token 方法中,我尝试了以下实现:
1.
rc = JSON.parse(HTTP.post('https://slack.com/api/oauth.access',
params: {
client_id: 'idgoes.here',
client_secret: 'secretgoeshere',
code: '12345'
}))
2.
response = Excon.post('https://slack.com/api/oauth.access',
headers: { 'Content-Type' => 'application/json; charset=utf-8' },
user: client_id, password: client_secret,
body: oauth_request_body.to_json)
我尝试的任何实现最终都会得到一个 invalid_client_id 响应。
我知道这可能与环境配置有关,但我不确定什么对调试有帮助,所以请让我知道我可以分享哪些其他信息。我在本地主机上运行。
更新:
我刚刚发现许多(可能是全部)Slack API 不接受 JSON 格式的主体(当它们以 JSON 格式发送响应时,这看起来很疯狂。
请确保在您的请求中使用 x-www-form-urlencoded 格式正文,否则它将无法正常工作。
"Content-Type" => "application/x-www-form-urlencoded"
【问题讨论】:
标签: ruby-on-rails ruby oauth-2.0 ruby-on-rails-5 slack-api