【问题标题】:Having trouble using cached tokens with Spotipy for Spotify?在 Spotipy for Spotify 中使用缓存令牌时遇到问题?
【发布时间】:2022-05-11 23:35:06
【问题描述】:

我正在尝试使用 Spotipy 访问用户的 Spotify 库,但遇到了一些麻烦。作为背景,我使用的是 Flask、SQLAlchemy 和 Flask-Login。

我在 github 上查看了 this tutorial 以开始使用,但这对我来说不太适用,因为如果您使用缓存,所有用户都可以访问其令牌被缓存的用户的播放列表,因为那里是缓存令牌,第一个用户之后的任何用户都无法登录 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 实例访问用户。但是,使用存储的访问代码(不出所料)会给我一个 Bad Request 错误。我不确定如何获取新代码,或者我应该存储什么以便我不需要缓存但仍然可以获得访问播放列表的凭据。或者,有没有一种方法可以缓存但只有某些用户可以访问缓存中的某些令牌?

谢谢!

【问题讨论】:

  • 您需要存储和使用刷新令牌以实现长期 OAuth2 访问,详见 Spotify API 授权文档的Authorization Code Flow 部分

标签: python caching flask spotify spotipy


【解决方案1】:

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

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

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
猜你喜欢
  • 1970-01-01
  • 2020-09-26
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多