【问题标题】:"415 Error" when querying Spotify for tokens向 Spotify 查询令牌时出现“415 错误”
【发布时间】:2014-10-15 11:04:26
【问题描述】:

我一直在尝试在 MeteorJS 中重新创建 spotify oauth 连接。我已经请求访问和刷新令牌,但我现在不断收到 415 错误。以下是相关代码:

 var results = HTTP.post(
                'https://accounts.spotify.com/api/token',
                {
                    data: {
                        code: code,
                        redirect_uri: redirectURI,
                        grant_type: 'authorization_code',
                        client_id: clientID,
                        client_secret: clientSecret
                    },
                    headers: {
                        'Content-Type':'application/json'
                    }
                }
            );

我似乎在这个演示中找不到任何其他关于问题和代码的好的文档:

https://github.com/spotify/web-api-auth-examples/tree/master/authorization_code

完美运行。

【问题讨论】:

  • 是的,我遇到了同样的问题。嗯。

标签: meteor oauth-2.0 spotify


【解决方案1】:

我遇到了类似的问题(但在 Java 中)。类似的解决方案是

                    headers: {
                        'Content-Type':'application/x-www-form-urlencoded'
                    }

【讨论】:

    【解决方案2】:

    发送 JSON 对象时需要使用params 而不是data。相关问题:Unsupported grant type error when requesting access_token on Spotify API with Meteor HTTP

    【讨论】:

      【解决方案3】:

      我已成功尝试使用以下函数从 Spotify 获取访问令牌。如您所见,您不需要指定Content-Type,而只需要使用params而不是data(就axios而言)。还要确保首先将客户端 ID 和客户端密钥与它们之间的“:”组合在一起,然后将组合字符串转换为 base 64。

      let getAccessToken = () => {
        let options = {
          url: 'https://accounts.spotify.com/api/token',
          method: 'POST',
          headers: {
            // 'Content-Type':'application/x-www-form-urlencoded',
            'Authorization': `Basic <base64 encoded client_id:client_secret>`
          },
          params: {
            grant_type: 'client_credentials'
          }
        }
        axios(options)
        .then((resp) => {
          console.log('resp', resp.data)
        })
        .catch((err) => {
          console.log('ERR GETTING SPOTIFY ACCESS TOKEN', err);
        })
      }
      

      【讨论】:

        【解决方案4】:

        如果你在做这个客户端它不起作用,因为 same origin policy 不允许你从客户端发布到另一个域。

        如果这是服务器端,我建议使用预先存在的 spotify api npm 模块,而不是编写自己的请求。 npmjs.org 上有很多 spotify api 实现。

        使用 arunoda 的 npm package 将 npm 包集成到您的流星应用程序中

        【讨论】:

        • 这是一个服务器端请求,因为客户端都不允许该请求,因为您指出的源策略相同,并且因为流星中的 HTTP 库不允许同步请求客户。使用预先存在的包不是一种选择,因为您会看到您指向的存储库只有三个工作功能。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多