【问题标题】:How to structure Socket.io Authentication如何构建 Socket.io 身份验证
【发布时间】: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 }); 在客户端编写一个断开连接处理程序,以允许用户在套接字因移动连接不佳而中断时重新连接。如何区分由于验证失败而导致的意外断开连接?

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

【问题讨论】:

    标签: socket.io flask-socketio


    【解决方案1】:

    我想使用 socket.on('disconnect', function() { //do something }); 在客户端编写一个断开连接处理程序允许用户在套接字因移动连接不佳而中断时重新连接。

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

    【讨论】:

    • 感谢 Miguel,这一切都很好。但是,如果 a) 初始登录由于某种原因失败或 b) 连接暂时中断,我确实需要显示一条信息性消息。我可以在我的登录函数中使用一个标志来检测初始提交何时失败(并在成功时清除标志)。我可以假设的所有其他情况都是辍学。
    猜你喜欢
    • 1970-01-01
    • 2015-05-27
    • 2019-05-23
    • 2015-08-29
    • 2021-11-18
    • 2012-02-04
    • 2017-07-03
    • 2019-04-17
    • 2018-08-03
    相关资源
    最近更新 更多