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

Spotipy重定向URI在服务器而非用户浏览器打开的问题求助

解决Spotipy在Heroku部署时的重定向与EOFError问题

第一步:修正Spotify开发者后台的重定向URI配置

  • 必须在Spotify开发者控制台的应用设置里,把https://nameofmyapp.herokuapp.com/callback(需带完整回调路径,不能仅填根域名)添加到重定向URI列表并保存。
  • 环境变量REDIRECT_URI必须和控制台填写的内容完全一致,包含https前缀与完整路径。

第二步:完善认证流程代码

你的现有代码缺少回调处理逻辑,Spotipy的OAuth流程需要专门的视图处理授权跳转后的回调请求,调整如下:

主视图(index)

def index(request):
    cache_handler = spotipy.DjangoSessionCacheHandler(request=request)
    auth_manager = spotipy.oauth2.SpotifyOAuth(
        client_id=env("CLIENT_ID"),
        client_secret=env("CLIENT_SECRET"),
        redirect_uri=env("REDIRECT_URI"),
        scope=env("SCOPE"),
        cache_handler=cache_handler
    )

    # 检查是否已完成授权
    if not auth_manager.validate_token(cache_handler.get_cached_token()):
        # 未授权则跳转至Spotify登录授权页
        auth_url = auth_manager.get_authorize_url()
        return redirect(auth_url)
    
    # 已授权则初始化Spotify会话
    session = spotipy.Spotify(oauth_manager=auth_manager, requests_session=True)
    # 此处可添加获取用户数据等业务逻辑
    return render(request, 'index.html', {'user_info': session.current_user()})

回调视图(callback)

def callback(request):
    cache_handler = spotipy.DjangoSessionCacheHandler(request=request)
    auth_manager = spotipy.oauth2.SpotifyOAuth(
        client_id=env("CLIENT_ID"),
        client_secret=env("CLIENT_SECRET"),
        redirect_uri=env("REDIRECT_URI"),
        scope=env("SCOPE"),
        cache_handler=cache_handler
    )

    # 处理授权回调,获取并缓存access token
    auth_manager.get_access_token(request.GET.get('code'))
    # 回调处理完成后跳转回主页面
    return redirect('index')

配置URL路由

在项目urls.py中添加回调路由:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('callback', views.callback, name='callback'),
]

第三步:排查EOFError的常见诱因

  • 环境变量配置错误:用heroku config命令检查Heroku上的CLIENT_ID、CLIENT_SECRET、REDIRECT_URI、SCOPE是否完整且无拼写错误。
  • HTTPS强制校验:Heroku应用默认强制HTTPS,确保REDIRECT_URI以https开头,禁止使用http。
  • Session后端配置:DjangoSessionCacheHandler依赖Django Session,Heroku上建议用数据库或Redis作为Session存储,避免使用本地内存Session。
  • Spotipy版本问题:升级Spotipy到最新版本,旧版本可能存在OAuth流程bug:
    pip install --upgrade spotipy
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:39:12