【问题标题】:Flask-OAuthlib "TypeError: sequence index must be integer, not 'str'"Flask-OAuthlib“类型错误:序列索引必须是整数,而不是'str'”
【发布时间】:2014-03-05 11:46:58
【问题描述】:

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

【问题讨论】:

  • 在设置 session var 并检查 rest 实际包含的内容之前,您是否尝试过敲入 pdb。我怀疑这不是你想的那样的字典。

标签: python oauth oauth-2.0 flask


【解决方案1】:

这种情况下的响应是 flask_oauthlib.client.OAuthException(RuntimeError) 而不是令牌请求成功时您将获得的 dict。错误消息肯定会更有帮助,我确信拉取请求会被接受 (good starting point)。

我没有尝试使用 flask-oauthlib 提供程序来复制它,只是使用您的示例代码对 Google 进行了快速测试,但两种情况下的原因可能相同。当 flask-oauthlib 和 Google 都默认假设为 POST 时,flask-oauthlib.client 假设令牌检索是一个 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'
)

看看有没有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 2017-01-27
    • 2016-02-09
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多