(spotipy) 方法永远不会完成,因为它在 oauth 重定向 url 的视图中结束

Posted

技术标签:

【中文标题】(spotipy) 方法永远不会完成,因为它在 oauth 重定向 url 的视图中结束【英文标题】:(spotipy) method never completes because it ends up at oauth redirect url's view 【发布时间】:2016-12-14 10:38:58 【问题描述】:

我正在尝试使用 spotipy 执行来自 Spotify 的搜索请求。我在我的 bash_profiles 中指定了客户端 ID、秘密 ID 和重定向 url (http://127.0.0.1:8000/callback/q),如 API 中所述。

def search(username, query):

    token = util.prompt_for_user_token(username, scope) #like oauth with redirect url
    print("received token response")

    if token:
        sp = spotipy.Spotify(auth=token)
        return sp.search(query, 1, 0, type='track')

问题是我使用的是 django,这也迫使我在 urls.py 中指定重定向 url 并在 views.py 中指定相应的视图

    [from urls.py...]
    url(r'^callback/q$', views.callback, name='callback'),

    [from views.py...]
    def callback(request):
        print("callback view reached")
        return render(request, 'rec/search.html')

似乎 django 然后拦截显示来自重定向 URL 的视图,所以我的搜索方法永远不会完成执行。我对如何获得需要重定向 url 的令牌感到有些困惑,然后继续执行授权请求之后的其余方法

【问题讨论】:

这没有多大意义。你的 bash_profile 和什么有什么关系?你为什么在网络应用程序中提示输入令牌? 这就是 Spotipy api 的工作原理。您使用 util 方法获取令牌,创建一个 spotify 对象并在其上调用方法。对于 bash 配置文件——您可以选择导出变量(就像我所做的那样)或将它们作为 args 传递给 auth 方法 在“用户提示”上更具体。它确实会在 spotify 上打开一个页面,并且用户必须同意给予某些特权。我相信这只是第一次身份验证,而不是刷新令牌 @tara 你有想过吗?我自己也面临类似的问题 【参考方案1】:

我不确定这是否有帮助,但我放弃了通过 util.prompt_for_user_token 进行的身份验证,转而使用 this basic implementation。它在瓶中实现,但应该相对容易转换为 django 和您的特定需求。我也希望这样做。

【讨论】:

谢谢!如果我发现任何其他有用的东西,我会看看我能用它做什么并在此处添加。尽管我仍然很好奇我做错了什么,因为似乎 auth-with-redirect 是一种常见的模式。我运气好一点,将身份验证令牌拆分为一个单独的方法,但仍然无法 100% 工作

以上是关于(spotipy) 方法永远不会完成,因为它在 oauth 重定向 url 的视图中结束的主要内容,如果未能解决你的问题,请参考以下文章

onNext() 永远不会在 PublishSubject 上被调用

使 UIViewPropertyAnimator 永远不会完成

使 UIViewPropertyAnimator 永远不会完成

Java并发-取消与关闭

iOS 8 自定义标签 LayoutSubviews 方法永远不会被调用?

一个永远不会执行的 cron 作业