在使用 Spotify 的 Spotipy 缓存令牌时遇到问题?

2024-01-01

我正在尝试使用 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!


您可以使用spotipy库中的内存缓存处理程序将访问令牌存储在内存中而不是磁盘中:https://github.com/plamere/spotipy/blob/master/spotipy/cache_handler.py https://github.com/plamere/spotipy/blob/master/spotipy/cache_handler.py

您还可以查看示例目录中的示例 Flask 应用程序:https://github.com/plamere/spotipy/blob/master/examples/app.py https://github.com/plamere/spotipy/blob/master/examples/app.py

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在使用 Spotify 的 Spotipy 缓存令牌时遇到问题? 的相关文章

随机推荐