1

正如标题所说,我一直在尝试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
4

0 回答 0