Python authlib flask - 如何明确地做 authorize_redirect?
Python authlib flask - how to do authorize_redirect explicitly?
我有“代码授权流程”登录,authlib flask 集成运行良好:
redirect_uri = url_for('authorize', _external=True)
return oauth.myOauth2.authorize_redirect(redirect_uri)
出于某种原因,我决定尝试使重定向更加明显。在重定向到某些人可能更陌生的登录页面之前,向用户展示我的应用程序片刻。
现在这种作品:
redirect_uri = url_for('authorize', _external=True)
aurl = oauth.myOauth2.create_authorization_url(redirect_uri)
# what to do with aurl['state']?
return render_template('redirect.html', delay=2,
redirect_notice='Redirecting to login',
redirect_url=aurl['url'])
但是,当我在登录后被重定向回“授权”时,我得到 authlib.integrations.base_client.errors.MismatchingStateError: mismatching_state: CSRF Warning! State not equal in request and response.
,我认为这是因为我没有保存 aurl['state']
。
但实际上我该怎么做呢?我很难梳理 authorize_redirect 是如何做到的。
也许有更好的方法?任何帮助表示赞赏!
有两种方法可以完成您的工作:
- 从
.authorize_redirect
中提取 url:
redirect_uri = url_for('authorize', _external=True)
resp = oauth.myOauth2.authorize_redirect(redirect_uri)
url = resp.headers.get('Location')
return render_template('redirect.html', delay=2,
redirect_notice='Redirecting to login',
redirect_url=url)
- 使用
.save_authorize_data
保存CSRF和其他数据:
redirect_uri = url_for('authorize', _external=True)
rv = oauth.myOauth2.create_authorization_url(redirect_uri)
oauth.myOauth2.save_authorize_data(request, redirect_uri=redirect_uri, **rv)
return render_template('redirect.html', delay=2,
redirect_notice='Redirecting to login',
redirect_url=rv['url'])
你可以从中学习:https://github.com/lepture/authlib/blob/master/authlib/integrations/flask_client/remote_app.py#L51
我有“代码授权流程”登录,authlib flask 集成运行良好:
redirect_uri = url_for('authorize', _external=True)
return oauth.myOauth2.authorize_redirect(redirect_uri)
出于某种原因,我决定尝试使重定向更加明显。在重定向到某些人可能更陌生的登录页面之前,向用户展示我的应用程序片刻。
现在这种作品:
redirect_uri = url_for('authorize', _external=True)
aurl = oauth.myOauth2.create_authorization_url(redirect_uri)
# what to do with aurl['state']?
return render_template('redirect.html', delay=2,
redirect_notice='Redirecting to login',
redirect_url=aurl['url'])
但是,当我在登录后被重定向回“授权”时,我得到 authlib.integrations.base_client.errors.MismatchingStateError: mismatching_state: CSRF Warning! State not equal in request and response.
,我认为这是因为我没有保存 aurl['state']
。
但实际上我该怎么做呢?我很难梳理 authorize_redirect 是如何做到的。
也许有更好的方法?任何帮助表示赞赏!
有两种方法可以完成您的工作:
- 从
.authorize_redirect
中提取 url:
redirect_uri = url_for('authorize', _external=True)
resp = oauth.myOauth2.authorize_redirect(redirect_uri)
url = resp.headers.get('Location')
return render_template('redirect.html', delay=2,
redirect_notice='Redirecting to login',
redirect_url=url)
- 使用
.save_authorize_data
保存CSRF和其他数据:
redirect_uri = url_for('authorize', _external=True)
rv = oauth.myOauth2.create_authorization_url(redirect_uri)
oauth.myOauth2.save_authorize_data(request, redirect_uri=redirect_uri, **rv)
return render_template('redirect.html', delay=2,
redirect_notice='Redirecting to login',
redirect_url=rv['url'])
你可以从中学习:https://github.com/lepture/authlib/blob/master/authlib/integrations/flask_client/remote_app.py#L51