我正在尝试使用 Spotipy 访问用户的 Spotify 库,但遇到了一些麻烦。作为背景,我使用 Flask、SQLAlchemy 和 Flask-Login。
我看着本教程 https://github.com/sheagcraig/actually_random在 github 上开始,但这对我来说不太适用,因为如果您使用缓存,所有用户都可以访问其令牌被缓存的用户的播放列表,并且由于有缓存的令牌,第一个之后的任何用户用户无法登录 Spotify。这是一些初始设置:
sp_oauth = oauth2.SpotifyOAuth(os.environ['SPOTIPY_CLIENT_ID'],
os.environ['SPOTIPY_CLIENT_SECRET'],
os.environ['SPOTIPY_REDIRECT_URI'],
scope="user-library-read")
为了解决这个问题,我首先尝试将每个用户的访问代码存储在我的数据库中(我也使用 SQLAlchemy)。它看起来像这样(在 Spotipy 使用访问代码重定向到的页面的方法下):
if request.args.get("code"):
dbsession.query(User).get(current_user.uid).addService(
request.args["code"])
dbsession.commit()
然而,这条路由的目的是返回用户拥有的播放列表的名称,所以我希望只要用户登录就可以访问它,而不必每次都通过 Spotify 授权 URL。所以,在这种情况下request.args["code"]
为空,我尝试:
token_info = sp_oauth.get_access_token(dbsession.query(User)
.get(current_user.uid)
.getService())
spotify = spotipy.Spotify(token_info["access_token"])
然后我尝试使用此 Spotify 实例访问用户。但是,使用存储的访问代码(毫不奇怪)会给我一个错误请求错误。我不确定如何获取新代码,或者应该存储什么,以便不需要缓存但仍然可以获得访问播放列表的凭据。或者,有没有一种方法可以缓存但只让某些用户访问缓存中的某些令牌?
Thanks!