我正在使用Flask-OAuthlib来设置OAuth2服务器。当我通过client.py脚本访问服务器时,出现错误:
TypeError: sequence index must be integer, not 'str'
显然,resp变量似乎有问题并且打印它导致“来自远程的响应无效”,这不是很有帮助。
以下是my client code的相关部分:
@app.route('/authorized')
@remote.authorized_handler
def authorized(resp):
if resp is None:
return 'Access denied: reason=%s error=%s' % (
request.args['error_reason'],
request.args['error_description']
)
session['remote_oauth'] = (resp['access_token'], '') # error occurs here
return jsonify(oauth_token=resp['access_token']) # and here
我意识到这是一个悬而未决的问题(实际上是2个,对于同一个问题),但作者是“休假”......谁知道多久
答案 0 :(得分:2)
在这种情况下,响应是flask_oauthlib.client.OAuthException(RuntimeError),而不是令牌请求成功时获得的dict。错误消息肯定会更有帮助,我确信会接受拉取请求(good starting point)。
我没有尝试使用flask-oauthlib提供程序复制它,只是使用您的示例代码对Google进行了快速测试,但两种情况下的原因可能相同。 flask-oauthlib.client假定,如果flask-oauthlib和Google默认采用POST,则令牌检索是一个GET请求。
尝试将access_token_method='POST'
添加到您的remote_app调用
remote = oauth.remote_app(
...
authorize_url='http://127.0.0.1:5000/oauth/authorize',
access_token_method='POST'
)
看看是否有帮助。