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

时间:2016-11-13 06:15:36

标签: python caching flask spotify spotipy

我正在尝试使用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这个实例访问用户。但是,使用存储的访问代码(不出所料)给我一个错误的请求错误。我不知道如何处理新代码,或者我应该存储什么,以便我不需要缓存,但仍然可以获取访问播放列表的凭据。或者,是否有一种方法可以缓存但只允许某些用户访问缓存中的某些令牌?

谢谢!

0 个答案:

没有答案