【问题标题】:flask OAuth State not equal in request and response烧瓶 OAuth 状态在请求和响应中不相等
【发布时间】:2021-12-06 20:33:03
【问题描述】:

我试图通过烧瓶上的 gmail OAuth 对用户进行身份验证,有时用户身份验证成功,然后有时我收到错误“请求和响应中的状态不相等”。 请注意,刷新回调页面可以解决问题 error

@auth.route('/login', methods=['POST','GET'])
def login():
    if 'google_id' in session:
        if col_users.count_documents({'google_id': session["google_id"], 'admin' : 1}) == 1:
            return redirect(url_for('adm.administration'))
        else:
            return redirect(url_for('dash.add_item'))
    authorization_url, state = flow.authorization_url()
    session['state'] = state
    session.modified = True
    return redirect(authorization_url)

@auth.route('/callback', methods=['POST','GET'])
def callback():
    flow.fetch_token(authorization_response=request.url)

    if session['state'] != request.args.get('state'):
        abort(500)
    
    credentials = flow.credentials
    request_session = requests.session()
    cached_seession = cachecontrol.CacheControl(request_session)
    token_request = google.auth.transport.requests.Request(session=cached_seession)

    id_info = id_token.verify_oauth2_token(
        id_token = credentials._id_token,
        request = token_request,
        audience = GOOGLE_CLIENT_ID
    )

    session['google_id'] = id_info['email']
    session['name'] = id_info['name']
    session.modified = True
    if col_users.count_documents({'google_id' : session['google_id'], 'admin' : 1}) == 1:
        return redirect(url_for('adm.administration'))
    else:
        return redirect(url_for('dash.add_item'))

【问题讨论】:

    标签: python flask session oauth


    【解决方案1】:

    使用更新后的新烧瓶会话模块修复了该问题:烧瓶会话存储

    flask-sessionstore

    【讨论】:

    • 您可以将此答案标记为正确答案,因为这可以解决您的问题
    【解决方案2】:

    这很可能是由于并行请求的出现,每个请求都使用不同的状态参数向提供者创建自己的身份验证请求。返回后,状态/响应可能与“其他”请求不匹配。您可能想考虑避免这些请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-14
      • 2020-09-07
      • 1970-01-01
      • 2014-07-23
      • 2018-11-29
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多