You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spotify授权码流程异常:无法进入用户登录页,触发内部服务器错误

排查Spotify授权跳转失败的问题

我来帮你梳理下可能导致无法跳转到Spotify登录页面的几个关键点,结合你的代码和环境来看:

1. URL拼接格式错误

你代码里拼接Spotify授权URL的时候多了一个斜杠:

return redirect(f"{SPOTIFY_AUTH_URL}/?{urllib.parse.urlencode(payload)}")

SPOTIFY_AUTH_URL已经是https://accounts.spotify.com/authorize,加上/?后会变成https://accounts.spotify.com/authorize/?,这种不符合规范的URL会被Spotify服务器拒绝,直接导致跳转失败。

修正方法:去掉中间多余的斜杠,改成:

return redirect(f"{SPOTIFY_AUTH_URL}?{urllib.parse.urlencode(payload)}")

2. 空STATE参数的潜在问题

虽然Spotify允许STATE参数为空,但空值可能触发它的安全拦截机制,而且STATE的核心作用是防止CSRF攻击,建议生成一个随机字符串来填充:

import secrets  # 顶部新增导入

STATE = secrets.token_hex(16)  # 生成16位随机字符串作为STATE

3. Flask路由函数命名冲突

你的重定向路由函数名是redirect(),但你已经从Flask导入了同名的redirect函数,这会导致命名冲突,Flask无法正确识别视图函数(虽然这是重定向后的问题,但先统一修正避免后续麻烦):
修正方法:修改函数名,比如改成spotify_redirect

@app.route("/redirect")
def spotify_redirect():
    startup.getUserToken(request.args['code'])
    return render_template("redirect.html")

4. AWS EC2的访问配置问题

  • 确保EC2实例的安全组已经开放80端口的入站流量,否则外部请求无法到达你的Flask应用。
  • 如果你用Flask开发服务器启动应用,默认只监听127.0.0.1,外部无法访问,需要改成:
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

先优先解决URL拼接的问题,这大概率是导致你无法跳转的核心原因,然后再依次检查其他配置。

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

火山引擎 最新活动