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' 需要授权。