如何构建Socket.io身份验证

时间:2018-05-01 11:51:54

标签: socket.io flask-socketio

我正在服务器端使用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 });编写一个断开处理程序,以允许用户在插槽因移动连接不良而损坏时重新连接。如何通过验证失败来区分意外断开与故意断开?

相反,我想提醒用户他们的验证过程失败。但是如何区分由于移动连接不良导致套接字断开的情况呢?

1 个答案:

答案 0 :(得分:1)

  

我想使用socket.on在客户端编写断开处理程序(' disconnect',function(){// do something});例如,当插座因移动连接不良而损坏时,允许用户重新连接。

您无需担心重新连接。 Socket.IO客户端协议包括重新连接支持,并且在连接丢失时将始终尝试重新连接。要验证这一点,请启动服务器,连接客户端,然后终止服务器。稍后重新启动服务器,您将看到在几秒钟内重新建立连接。