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

Flask+Spotipy开发问题:他人授权后播放列表创建于开发者账户

问题分析与修复方案

核心问题

你遇到的问题根源是Spotify客户端对象(sp)没有关联到当前授权用户的凭证,而是始终使用你自己的开发者账户凭证初始化。不管其他用户怎么授权,所有API操作都走你的账户,自然播放列表会创建在你的账户下。

具体修复步骤

1. 为每个用户会话存储独立的授权凭证

在Flask的用户会话(session)中保存当前用户的Spotify access token,确保每个用户请求都用自己的token初始化sp对象,而不是复用全局的sp。

2. 动态初始化用户专属的Spotify客户端

在处理创建播放列表的路由里,从会话中取出当前用户的token,用它初始化sp,而不是使用固定的开发者凭证。

修改后的代码示例

from flask import Flask, session, request, redirect
from spotipy import Spotify

app = Flask(__name__)
app.secret_key = "你的Flask密钥"

# 假设授权回调路由已经正确获取并存储用户token
@app.route('/callback')
def callback():
    # 这里是获取Spotify授权码、兑换token的逻辑
    token_info = ... # 从Spotify API获取的用户token信息
    session['spotify_token'] = token_info['access_token']
    return redirect('/create-playlist')

@app.route('/create-playlist', methods=['POST'])
def create_playlist():
    # 取出当前用户的token,未登录则跳转授权
    access_token = session.get('spotify_token')
    if not access_token:
        return redirect('/login')
    
    # 用当前用户的token初始化Spotify客户端
    sp = Spotify(auth=access_token)
    username = sp.me()['id']
    
    # 你的业务逻辑(检查YT链接有效性等)
    spotifyPlaylistName = request.form.get('playlist_name')
    videoId = ... # 从YT链接解析出的视频ID列表
    
    # 创建播放列表
    sp.user_playlist_create(username, spotifyPlaylistName)
    playlistId = getPlaylistId(sp, username, playlistName=spotifyPlaylistName)
    trackIds = getTrackIds(sp, videoIds=videoId)
    sp.user_playlist_add_tracks(username, playlistId, trackIds)
    
    return "播放列表已成功创建到你的Spotify账户"

def getPlaylistId(sp, username, playlistName):
    playlistId = ''
    playlists = sp.user_playlists(username)
    for playlist in playlists['items']:
        if playlist['name'] == playlistName:
            playlistId = playlist['id']
            break # 找到后立即退出循环,提升效率
    return playlistId

def getTrackIds(sp, videoIds):
    trackIds = []
    for title in videoIds:
        results = sp.search(q=f'{title}', type='track')
        if results['tracks']['total'] == 0:
            continue
        trackIds.append(results['tracks']['items'][0]['uri'])
    return trackIds

额外注意事项

  • 确保你的OAuth授权流程正确引导用户登录自己的Spotify账户,获取的是用户的授权码,而非你自己的固定凭证。
  • 若使用SpotifyOAuth类,要确保每个请求的cache_path不共用,或者直接用会话存储token,避免不同用户的凭证互相覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:02:06