我正在尝试使用ruby创建一个spotify Web管理器,以使我遵循Authorization Guide。
我的后端看起来类似于这个github中spotify的家伙所做的例子。你可以在这里看到code here。
所以我得到的错误是400 - 错误的请求或415 - 不支持的媒体类型。
起初我使用的是net / http核心库,但是因为我做错了,我使用了Typhoeus,结果是一样的。
这是代码无效:
request = Typhoeus::Request.new("https://accounts.spotify.com/api/token",
method: :post,
body: {
grant_type: "authorization_code",
code: code,
redirect_uri: "http://localhost:5000/auth/spotify/callback"
},
headers: {
"Authorization": "Basic #{Base64.strict_encode64("#{settings.spotify_id}:#{settings.spotify_key}")}"
},
followlocation: true
)
logger.info request.inspect
request.on_complete do |response|
logger.info "[]" * 100
logger.info response
if response.success?
logger.info "SUCCESS"
elsif response.timed_out?
logger.info "TIMED OUT"
elsif response.code == 0
logger.info response.return_message
else
logger.info "HTTP request failed: #{response.code.to_s}"
redirect '/auth/failure'
end
end
request.run
好吧,如果你们中有人知道发生了什么事情,那么了解它会很有帮助。
提前致谢。
修改
字符串插值工作正常,已经在控制台上测试过。
"Basic #{Base64.strict_encode64("#{settings.spotify_id}:#{settings.spotify_key}")}"
关于 redirect_uri ,必须运行良好,有一点因为本指南用localhost示例解释,其次,Authorization Guide上解释的第一个请求工作正常,问题当我试图在该指南上做4步时发生。
答案 0 :(得分:0)
你确定那种字符串插值有效吗?您是否看过wireshark中的流量以查看它是否正常工作?它看起来很可疑,因为你在双引号中使用双引号仍然期望它能够工作。如果您不想设置wireshark,请让您的应用程序在控制台上发布请求文本。此外,你确定Spotify会允许redirect_uri与localhost一起使用吗?此外,你什么时候得到400,你什么时候得到415?这是重要的信息,你不能只是把它们混为一谈。
答案 1 :(得分:0)
我已经改变了HTTParty的Typhoeus宝石,现在错误变得更加清晰了。
这里的主要内容不是400或415错误,是附加到此错误的消息。这里的错误是:
"error"=>"invalid_grant", "error_description"=>"Invalid authorization code"
所以,我没有意识到这一点,但我不明白这个消息,有时疲劳和挫折让你看不到明显的信息。
现在,只需知道为什么认证。代码无效。
无论如何,谢谢你的帮助。