【问题标题】:Spotify API {'error': 'invalid_client'} Authorization Code Flow [400]Spotify API {'error': 'invalid_client'} 授权代码流程 [400]
【发布时间】:2019-05-03 05:14:44
【问题描述】:

这是我向https://accounts.spotify.com/api/token 发出 POST 请求的众多尝试之一。

范围设置为“playlist-modify-public, playlist-modify-private”。

我正在使用 Python 3.7、Django 2.1.3。

无论我做什么,response_data 都会返回 {'error': 'invalid_client'}

我已经尝试了很多事情,包括根据 official Spotify documentation 为这个特定的请求传递请求正文中的 client_id/client_secret ......但无济于事。

请帮忙!

def callback(request):

    auth_token = request.GET.get('code')     # from the URL after user has clicked accept
    code_payload = {
        'grant_type': 'authorization_code',
        'code': str(auth_token),
        'redirect_uri': REDIRECT_URI,
    }

    auth_str = '{}:{}'.format(CLIENT_ID, CLIENT_SECRET)
    b64_auth_str = base64.b64encode(auth_str.encode()).decode()

    headers = {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Authorization': 'Basic {}'.format(b64_auth_str)
    }

    post_request = requests.post(SPOTIFY_TOKEN_URL, data=code_payload, headers=headers)

    response_data = json.loads(post_request.text)
        # ==> {'error': 'invalid_client'}

【问题讨论】:

  • 你好。你想好怎么解决了吗?
  • 嘿@MatteusBarbosa,我实际上意识到我已经在 Spotify Dashboard 上重置了我的 Spotify client_secret 并且完全忘记了相应地修改我的代码......感觉真的很聪明:|
  • 感谢您的回复

标签: python django spotify


【解决方案1】:

我怀疑问题在于您的 Authorization 标头中的字符无效。尝试使用 urlsafe_b64encode 而不是 b64encode 来准备该标头值:

b64_auth_str = base64.urlsafe_b64encode(auth_str.encode()).decode()

【讨论】:

  • 我有同样的错误使用: hash = (client_id + ":" + client_secret).toString('base64');所以我在这个网站上对其进行了编码:base64encode.org 它可以工作
【解决方案2】:

来自文档

另一种发送客户端 ID 和密码的方法是在 POST 正文中作为请求参数(client_id 和 client_secret),而不是在标头中发送 base64 编码。

    SPOTIFY_TOKEN = "https://accounts.spotify.com/api/token"
    request_body = {
        "grant_type": GRANT_TYPE,
        "code": code,
        "redirect_uri": REDIRECT_URI,
        "client_id": SPOTIFY_CLIENT_ID,
        "client_secret": SPOTIFY_CLIENT_SECRET,
    }
    r = requests.post(url=SPOTIFY_TOKEN, data=request_body)
    resp = r.json()

这也有效。

【讨论】:

  • 这应该是被接受的答案 - 当前接受的答案具有完全相同的问题。
【解决方案3】:

Here 是另一个提到的问题。如果错误是

INVALID_CLIENT: Invalid redirect URI

那么您需要注册您的 URI。从源头引用 - 将所有内容集中在一个地方:

只需登录,找到您的应用,然后点击右上角的“编辑设置”。在重定向 URI 下添加 REDIRECT_URI 并记住单击底部的保存。这应该可以解决您的问题。

【讨论】:

    猜你喜欢
    • 2017-10-19
    • 2014-11-20
    • 2021-04-02
    • 2018-09-22
    • 2019-09-12
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多