flask - 在 SocketIO 事件中从 flask_security 获取 current_user 对象的问题
问题描述
正如标题所说,我一直在尝试current_user
在 SocketIO 事件中引用该对象,如下所示:
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(255), unique=True)
password = db.Column(db.String(255))
fs_uniquifier = db.Column(db.String(255), unique=True, nullable=False)
@socketio.on('connect')
@socketio.on('login')
def on_connect():
print("Client connected")
print("Current user ID:", current_user.id)
print("SocketIO Session ID:", request.sid)
该连接是在用户登录之前创建的,因此我尝试进行集成flask-session
以在用户登录后使current_user
对象保持最新状态,并且我添加了一个登录后挂钩以验证用户实际上是否已登录:
app.config['SESSION_TYPE'] = 'filesystem'
socketio = SocketIO(app, manage_session=False)
sess = Session(app)
@user_logged_in.connect_via(app)
def _after_login_hook(sender, user, **extra):
print("ID of the user that just logged in:", user.id)
这是我第一次连接到应用程序时得到的当前输出:
Client connected
Current user ID: None
SocketIO Session ID: WyOkORnDbLjSrXUDAAAD
当前用户的None
值是预期的,因为到目前为止用户尚未登录,因此我们正在获取AnonymousUser
对象。问题是用户登录后我仍然收到一个None
值:
ID of the user that just logged in: 2
Client connected
Current user ID: None
SocketIO Session ID: WyOkORnDbLjSrXUDAAAD
任何关于为什么我在成功登录后可能会得到该AnonymousUser
对象的想法将不胜感激。
Flask==1.1.2
Flask-Login==0.5.0
Flask-Security-Too==3.4.5
Flask-SocketIO==5.0.1
Flask-Session==0.3.2
解决方案
推荐阅读
- angular - 将 updateOn 设置为提交时未调用 Angular Reactive 表单自定义验证器
- c# - OnPropertyChanged 未触发
- python - 无法从“sklearn.utils.fixes”导入名称“parse_version”
- html - 更改 HTML img 标题上的字体
- python - 如何在目录中搜索文件满足条件?
- javascript - 如何为回调函数设置默认值?
- reporting-services - SSRS 数据返回但未在 Tablix 中显示
- javascript - 从没有方法的字符(for循环)javascript创建一个字符串
- ios - 在 iOS 的 MapKit 中显示一张特定的国家地图
- typescript - 即使之前有检查,VSCode TypeScript Map get 仍然被认为是未定义的