使用Python+Flask调用Spotify API时遇无效重定向URI错误求助
Spotify API Invalid Redirect URI 问题排查与解决
问题概述
使用Python + Flask开发应用时,调用Spotify API触发invalid redirect URI错误,已在Spotify开发者后台添加重定向URI并保存,但问题仍未解决,预期正常弹出Spotify OAuth授权窗口。
错误截图:
已配置的重定向URI截图:
预期效果示例:
代码片段
from flask import Flask, request, url_for, session, redirect import spotipy from spotipy.oauth2 import SpotifyOAuth app = Flask(__name__) app.secret_key = "" app.config['SESSION_COOKIE_NAME'] = 'Spotify cookie' @app.route('/') def login(): sp_oauth = create_spotify_oauth() auth_url = sp_oauth.get_authorize_url() return redirect(auth_url) @app.route('/redirect') def redirectPage(): return 'redirect' @app.route('/getTracks') def getTracks(): return 'PAIN' def create_spotify_oauth(): return SpotifyOAuth( client_id="", client_secret="", redirect_uri=url_for('redirectPage', _external=True), scope="user-library-read")
排查与解决步骤
1. 验证生成的重定向URI与后台配置完全一致
url_for('redirectPage', _external=True)会根据Flask运行环境动态生成URI,可能和后台配置存在差异。可以在login路由中打印授权URL,检查其中的redirect_uri参数:
@app.route('/') def login(): sp_oauth = create_spotify_oauth() auth_url = sp_oauth.get_authorize_url() print(auth_url) # 打印后查看redirect_uri参数 return redirect(auth_url)
确保打印出的redirect_uri和Spotify后台添加的URI完全匹配(包括协议http/https、端口号、路径,不能有多余的斜杠或拼写错误)。
2. 统一本地服务地址
- 如果本地用
flask run默认启动地址是http://localhost:5000,后台必须配置对应的http://localhost:5000/redirect;如果修改了端口(比如flask run --port=8080),后台URI也要同步更新。 - 不要混用
localhost和127.0.0.1,两者在Spotify后台属于不同的URI,必须保持一致。
3. 确认后台配置生效
- 后台保存URI后可能需要等待1-2分钟才会生效,不要立即测试。
- 刷新Spotify开发者后台页面,确认重定向URI确实存在于列表中,且格式完全正确(无多余空格、斜杠)。
4. 硬编码重定向URI测试
暂时替换动态生成的URI为硬编码字符串,排除url_for的潜在问题:
def create_spotify_oauth(): return SpotifyOAuth( client_id="你的Client ID", client_secret="你的Client Secret", redirect_uri="http://localhost:5000/redirect", # 与后台配置完全一致 scope="user-library-read")
测试如果正常,再排查url_for的配置问题。
5. 检查Flask的SERVER_NAME配置
如果你的Flask应用设置了app.config['SERVER_NAME'],会影响url_for生成的外部URL,确保该配置和后台重定向URI的域名/端口匹配。
内容的提问来源于stack exchange,提问作者Pain___
相关产品推荐
相关产品推荐

