Auth0,flask:由于 CSRF 错误,用户需要登录两次
Auth0, flask: Users need to login twice due to CSRF error
当用户登录我的 Flask 应用程序时,它第一次无法正常工作,但通常在第二次尝试时可以正常工作。第一次登录尝试时出现以下错误:
MismatchingStateError: mismatching_state: CSRF Warning! State not equal in request and response
在 windows PC 上的本地主机上 运行 时,我没有遇到这个问题。我在将我的代码移动到 linode 运行 ubuntu 20.04 时遇到了这个问题。我正在考虑 python3 中的 flask 以及以下软件包。
from flask import Flask
from flask import jsonify
from flask import redirect
from flask import render_template
from flask import session
from flask import url_for
from flask import request
from flask import send_from_directory
from authlib.integrations.flask_client import OAuth
我的密钥固定在 .env 文件中。它们不是随机生成的。
oauth = OAuth(app)
auth0 = oauth.register(
'auth0',
client_id=AUTH0_CLIENT_ID,
client_secret=AUTH0_CLIENT_SECRET,
api_base_url=AUTH0_BASE_URL,
access_token_url=AUTH0_BASE_URL + '/oauth/token',
authorize_url=AUTH0_BASE_URL + '/authorize',
client_kwargs={
'scope': 'openid profile email',
},
)
回调处理中的以下代码给出了 CSRF 错误。
@app.route('/callback')
def callback_handling():
auth0.authorize_access_token()
resp = auth0.get('userinfo')
在以下 link 的帮助下,我可以通过在 linux 上更新我的 ntp 来解决这个问题:
https://askubuntu.com/questions/254826/how-to-force-a-clock-update-using-ntp
apt-get install -y ntp
sudo service ntp stop
sudo ntpd -gq
sudo service ntp start
除了我的python服务器
,我还添加了一个尝试
try:
auth0.authorize_access_token()
resp = auth0.get('userinfo')
userinfo = resp.json()
session[constants.JWT_PAYLOAD] = userinfo
session[constants.PROFILE_KEY] = {
'user_id': userinfo['sub'],
'name': userinfo['name'],
'picture': userinfo['picture'],
'email_verified':userinfo['email_verified']
}
except:
return redirect("/mainpage")
#Some code
return redirect('mainpage')
确保 'mainpage' 需要授权。
当用户登录我的 Flask 应用程序时,它第一次无法正常工作,但通常在第二次尝试时可以正常工作。第一次登录尝试时出现以下错误:
MismatchingStateError: mismatching_state: CSRF Warning! State not equal in request and response
在 windows PC 上的本地主机上 运行 时,我没有遇到这个问题。我在将我的代码移动到 linode 运行 ubuntu 20.04 时遇到了这个问题。我正在考虑 python3 中的 flask 以及以下软件包。
from flask import Flask
from flask import jsonify
from flask import redirect
from flask import render_template
from flask import session
from flask import url_for
from flask import request
from flask import send_from_directory
from authlib.integrations.flask_client import OAuth
我的密钥固定在 .env 文件中。它们不是随机生成的。
oauth = OAuth(app)
auth0 = oauth.register(
'auth0',
client_id=AUTH0_CLIENT_ID,
client_secret=AUTH0_CLIENT_SECRET,
api_base_url=AUTH0_BASE_URL,
access_token_url=AUTH0_BASE_URL + '/oauth/token',
authorize_url=AUTH0_BASE_URL + '/authorize',
client_kwargs={
'scope': 'openid profile email',
},
)
回调处理中的以下代码给出了 CSRF 错误。
@app.route('/callback')
def callback_handling():
auth0.authorize_access_token()
resp = auth0.get('userinfo')
在以下 link 的帮助下,我可以通过在 linux 上更新我的 ntp 来解决这个问题: https://askubuntu.com/questions/254826/how-to-force-a-clock-update-using-ntp
apt-get install -y ntp
sudo service ntp stop
sudo ntpd -gq
sudo service ntp start
除了我的python服务器
,我还添加了一个尝试try:
auth0.authorize_access_token()
resp = auth0.get('userinfo')
userinfo = resp.json()
session[constants.JWT_PAYLOAD] = userinfo
session[constants.PROFILE_KEY] = {
'user_id': userinfo['sub'],
'name': userinfo['name'],
'picture': userinfo['picture'],
'email_verified':userinfo['email_verified']
}
except:
return redirect("/mainpage")
#Some code
return redirect('mainpage')
确保 'mainpage' 需要授权。