oauth2.0 为什么Spotify API会向其他用户显示我的数据?

rhfm7lfc  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(98)

我创建了一个小应用程序。它的一部分显示用户的播放列表供他们选择。首先,我遇到了用户再次登录的问题,因为我的git存储库中有一个缓存文件夹,它正在推送旧令牌。我删除了那个缓存文件沿着pycache文件夹。从那时起,当用户被带到页面选择他们的播放列表时,它显示的是我个人的Spotify播放列表,而不是他们的!我不知道发生了什么!我没有改变www.example.com文件中的任何代码app.py。大约一个小时前,当一个用户第一次登录时,它显示的是他们的播放列表。直到我删除了该高速缓存文件。关于可能是什么问题的任何线索?
下面是相关页面的代码。/toptracks是重定向到/selectedplaylist页面的重定向URI。这是登录用户的播放列表列表应该显示为列表的地方。相反,我的播放列表正在显示...

app= Flask(__name__, template_folder='templates')
app.secret_key= appKey
app.config['SESSION_COOKIE_NAME']= 'A Cookie'
TOKEN_INFO= 'token_info'

def create_spotify_oauth():
    return SpotifyOAuth(
         client_id= SPOTIPY_CLIENT_ID,
         client_secret= SPOTIPY_CLIENT_SECRET,
         redirect_uri='https://myurl.com/toptracks',
         scope= 'user-top-read'
    )

         

@app.route("/")
def index():
    sp_oauth= create_spotify_oauth()
    auth_url= sp_oauth.get_authorize_url()
    return render_template('index.html', auth_url=auth_url)
@app.route('/toptracks')
def redirector():
    sp_oauth= create_spotify_oauth()
    session.clear()
    code= request.args.get('code')
    token_info= sp_oauth.get_access_token(code)
    print(token_info)
    session[TOKEN_INFO]= token_info
    return redirect('/selectplaylist')

@app.route('/selectplaylist')
def selectPlaylist():
    try:
        token_info= get_token()
    except:
        print('try logging in again')
        redirect('/')
    sp= spotipy.Spotify(auth=token_info['access_token'])
    user= sp.current_user()['id']
    allPlaylists= sp.user_playlists(user=user,limit=50)['items']
    playName= [[i.get('name'),i.get('id')] for i in allPlaylists]
    playId= [i.get('id') for i in allPlaylists]
    return render_template('selectPlaylist.html',playName=playName,playId=playId)

def get_token():
    token_info= session.get(TOKEN_INFO, None)
    if not token_info:
        raise 'exception'
    now = int(time.time())
    is_expired= token_info['expires_at'] - now < 60
    if (is_expired):
        sp_oauth= create_spotify_oauth()
        token_info= sp_oauth.refresh_access_token(token_info['refresh_token'])
    return token_info

字符串
我试图删除一些其他的缓存文件,但这并没有解决任何问题。我不知道我还可以尝试什么,因为代码本身似乎很好。我对我可以尝试的事情感到困惑,因为它在几个小时前工作得很好。

hgb9j2n6

hgb9j2n61#

对我来说,这个问题是由Spotify在我的系统中自动创建一个.cache文件引起的。我在我的模块中应用了这个cleanup()函数,每当提取Spotify用户数据时,它就修复了一切:

def cleanup():
    cache_file = '.cache'
    if os.path.exists(cache_file):
        os.remove(cache_file)

字符串

相关问题