flask - 从 OpenID 连接提供者回调重定向后无法访问 Flask-Login current_user
问题描述
我正在使用 openID 提供程序来验证我的烧瓶应用程序的用户。在认证网站上认证后,提供者向我的回调端点发送一个携带用户信息的 id_token 作为POST
请求。
我解码此令牌,创建用户对象并将其保存在缓存中。保存用户后,用户登录后使用flask_login.login_user()
功能重定向到首页
@app.route("/opentoken", methods=['POST'])
def openid_callback():
token = request.form['id_token']
decoded_token = jwt.decode(token, verify=False)
preferred_username = decoded_token['preferred_username']
user = save_user(preferred_username, decoded_token)
login_user(user)
log.info(current_user) #That confirms the current_user has the user info
return redirect('/home')
预期的行为是,在重定向时,主端点将可以访问flask_login.current_user
. 这应该发生,因为烧瓶登录集成应该让烧瓶在每个请求之前调用这个函数。
@app.login_manager.user_loader
def load_user(_id):
try:
user = users[_id]
return user
except KeyError:
return None
但是,实际行为是不同的。被叫端点重定向后/home
无法访问current_user
@home_bp.route('/home')
def home():
print(f"Current User: {current_user}") #This returns that the user is AnonymousMixin
return render_template(....)
然而,如果页面被刷新(直接调用端点),它能够选择current_user
并打印登录用户的信息。
换句话说,在重定向时,login_manager.user_loader
flask-login 回调不会被调用,而是在直接调用端点时照常调用。
我不确定我是否遗漏或误解了某些内容,或者是否存在导致此行为的特殊错误。
解决方案
推荐阅读
- android - 不同设备中Button的相对位置
- r - 将名称保存为运行众多单变量回归模型的函数的列表
- python - Windows 版本的 Pycharm 无法正确显示列表
- excel - 使用excel为每个人生成表分配
- linux - 是否可以检查非阻塞套接字是否已关闭?
- r - 合并重复的特定记录并在 R 中保留一些已删除记录的值
- r - Rstudio CentOS 6 无法下载“googleway”
- php - 如何加快 PHP 中的“for”循环(创建一个非常大的数组)?
- google-cloud-storage - 在 apache-beam 作业中使用 start_bundle() 不起作用。Unpickleable storage.Client()
- python - 在非字母数字字符之前匹配单词边界