【发布时间】:2018-05-01 11:51:53
【问题描述】:
我正在服务器端使用 Flask-SocketIO 和 javascript Socket.IO 客户端创建应用程序。 (后面还会有 Python 客户端)。我想确保用户在连接到 Web 套接字服务器之前经过身份验证。
我创建了一个 PHP 登录表单来检查用户名和密码。如果这些是有效的,则返回一个唯一的令牌,并且该令牌也被插入到服务器上的一个表中。令牌被传递到客户端 javascript,在那里它与创建 Web 套接字连接的请求一起提交。
据我了解,Flask-SocketIO 只会接受连接,我需要将验证代码放在 @socketio.on('connect') 装饰器下。 (我假设基于服务器的 Socket.IO 实现以类似的方式工作)。因此,我的代码根据数据库表检查提交的令牌,如果它有效,则只允许发生 Web 套接字连接。但是,如果令牌无效,我会发出 disconnect() 命令。 javascript 客户端不再尝试连接,这是我在这种情况下想要的。
这就是棘手的地方......
我想使用socket.on('disconnect', function() { //do something }); 在客户端编写一个断开连接处理程序,以允许用户在套接字因移动连接不佳而中断时重新连接。如何区分由于验证失败而导致的意外断开连接?
相反,我想提醒用户他们的验证过程失败了。但是如何区分这与由于移动连接不良导致套接字损坏的情况呢?
【问题讨论】: