You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spotify Web授权Python代码报错‘code must be supplied’求助

解决Spotify Web授权"code must be supplied"错误

问题根源分析

你的代码存在两个关键问题导致授权失败:

  • 拼写错误:SPOTIFTY_CLIENT_ID里多了一个字母T,应该是SPOTIFY_CLIENT_ID。这个错误会导致Spotify无法识别你的客户端身份,直接阻断授权流程。
  • 缺少授权触发逻辑:仅初始化SpotifyOAuth和Spotify实例还不够,当没有缓存令牌时,你需要主动触发授权流程,引导用户完成登录授权并获取回调中的授权码(code)。

修复步骤及代码示例

1. 修正客户端ID拼写

把SPOTIFTY_CLIENT_ID改为SPOTIFY_CLIENT_ID,确保和你在Spotify开发者后台创建的应用信息完全一致。

2. 添加完整授权流程处理

在调用sp.current_user()之前,先检查缓存的令牌是否存在。如果不存在,生成授权URL引导用户完成授权,再解析回调URL中的code来交换并缓存令牌。

修改后的完整代码:

import spotipy
from spotipy.oauth2 import SpotifyOAuth
import webbrowser
from urllib.parse import urlparse, parse_qs

# 你的配置参数
REDIRECT_URL = "http://localhost:8080/callback"  # 必须和开发者后台设置的重定向URI完全一致
SPOTIFY_CLIENT_ID = "你的客户端ID"
SPOTIFY_CLIENT_SECRET = "你的客户端密钥"
STATE = "random_state_string"
SCOPE = "user-read-private user-read-email"  # 根据需求调整权限范围
USERNAME = "你的Spotify用户名"

auth_manager = SpotifyOAuth(
    redirect_uri=REDIRECT_URL,
    client_id=SPOTIFY_CLIENT_ID,
    client_secret=SPOTIFY_CLIENT_SECRET,
    state=STATE,
    scope=SCOPE,
    show_dialog=True,
    cache_path="token.txt",
    username=USERNAME
)

# 检查缓存的令牌是否有效
token_info = auth_manager.get_cached_token()

if not token_info:
    # 生成授权URL
    auth_url = auth_manager.get_authorize_url()
    print(f"请访问以下URL完成授权:\n{auth_url}")
    # 自动打开浏览器(可选,也可以手动复制URL访问)
    webbrowser.open(auth_url)
    
    # 让用户输入授权后的回调URL
    print("授权完成后,复制浏览器地址栏的完整URL并粘贴到这里:")
    callback_url = input().strip()
    
    # 解析回调URL中的授权码code
    parsed_url = urlparse(callback_url)
    code = parse_qs(parsed_url.query).get("code", [None])[0]
    
    if not code:
        print("授权失败:未获取到有效授权码")
        exit(1)
    
    # 用code交换令牌并写入缓存文件
    token_info = auth_manager.get_access_token(code)

# 初始化Spotify客户端
sp = spotipy.Spotify(auth_manager=auth_manager)

try:
    user_id = sp.current_user()["id"]
    print(f"Authenticated user ID: {user_id}")
except spotipy.SpotifyException as e:
    print(f"Authentication failed: {e}")
except Exception as e:
    print(f"An error occurred: {e}")

3. 额外注意事项

  • 确保REDIRECT_URL和Spotify开发者后台应用设置中的重定向URI完全一致,包括协议(http/https)、域名和端口。
  • 首次运行时,完成浏览器授权后必须把地址栏的完整URL复制回程序,这样才能生成token.txt缓存文件。
  • 后续运行时,只要token.txt存在且令牌未过期,程序会自动读取缓存,无需重复授权。

内容的提问来源于stack exchange,提问作者Chisom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 18:42:33