Flask-OAuthlib“TypeError:序列索引必须是整数,而不是'str'”

时间:2014-02-07 21:46:14

标签: python oauth oauth-2.0 flask

我正在使用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个,对于同一个问题),但作者是“休假”......谁知道多久

1 个答案:

答案 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'
)

看看是否有帮助。