我在Heroku Flask应用程序中验证我的用户时遇到问题,因为我的procfile包含
web: gunicorn --worker-class eventlet -w 1 app:app
字符串
如果我将procfile更改为以下内容,则身份验证没有问题。
web: gunicorn app:app
型
下面是我的验证用户的代码。在Procfile中使用web: gunicorn --worker-class eventlet -w 1 app:app
时,用户被重定向到类似https://accounts.spotify.com/en/authorize?client_id=8247cd9f7e43....的页面。我收到一个内部服务器错误。当我将Procfile更改为web: gunicorn app:app
时,用户验证正确,并被重定向到主页。
@app.route('/', methods=['GET'])
def index():
cache_handler = spotipy.cache_handler.FlaskSessionCacheHandler(session)
auth_manager = spotipy.oauth2.SpotifyOAuth(scope='user-read-currently-playing playlist-modify-private',
cache_handler=cache_handler,
show_dialog=True)
if 'code' in request.args:
code = request.args['code']
print("Code is", code)
# Log a message
logging.info("Code is %s", code)
# Step 2. Being redirected from Spotify auth page
auth_manager.get_access_token(code)
logging.info("Code is %s", code)
if not auth_manager.validate_token(cache_handler.get_cached_token()):
# Step 1. Display sign-in link when no token
auth_url = auth_manager.get_authorize_url()
return f'<h2><a href="{auth_url}">Sign in</a></h2>'
# Step 3. Signed in, display data
spotify = spotipy.Spotify(auth_manager=auth_manager)
# Render the index.html template with the text entry box, submit button, and Spotify data
return render_template('index.html')
型
我在这个应用程序中使用Flask-SocketIO,所以我需要能够使用eventlet。如果你能帮忙的话,我将不胜感激。问题似乎不是重定向URI,因为它在没有eventlet的情况下工作。
1条答案
按热度按时间czq61nw11#
如果您遇到Flask-SocketIO(使用Eventlet)和Spotipy库之间的冲突,您可以尝试的另一种方法是使用Gevent库。Gevent是另一个类似于Eventlet的异步库,它可能与Spotipy使用的请求库更兼容。
按照以下步骤修改Flask应用程序以使用Gevent:
**1.更新您的Procfile:**修改您的Procfile,使用Gunicorn的Gevent worker。将Procfile的现有内容替换为以下内容:
字符串
**2.安装Gevent:**您需要在虚拟环境中安装gevent和gevent-websocket。你可以用pip来做:
型
**3.修改Flask应用:**使用async_mode ='gevent'初始化SocketIO对象。另外,在应用程序的开始执行monkey补丁,但使用gevent而不是eventlet。下面是您的代码可能的外观:
型