简要分析socketio-auth
· 阅读需 7 分钟
看到不少noder在问socket.io如何控制权限这类问题,想到去年在echojs还是HackerNews上看到的socketio-auth模块,还是一定程度上解决这类问题的,尽管它的实现相当简单,但至少提供了一个思路。
socketio-auth是啥
也不详细介绍了,原文在这里《socket.io认证模块socketio-auth》
大致验证过程
1.为socket.io挂上模块
var io = require('socket.io').listen(app);
require('socketio-auth')(io, {
authenticate: authenticate,
postAuthenticate: postAuthenticate,
timeout: 1000
});
参数
authenticate
验证用户身份,比如在这里查询数据库,对比用户信息,成功后标记,然后调用下面的postAuthenticate
函数postAuthenticate
在验证成功后的处理,你可以做一些你爱做的事,比如买衣服什么的:)timeout
超时时间,等待用户验证的时间毫秒数,超过这个时间就会强制断开了
在这个过程干了这么几件事:
- 将所有namespace的连接全部清除一遍 https://github.com/invisiblejs/socketio-auth/blob/master/lib%2Fsocketio-auth.js#L23
- 给socket.io绑定
connection
事件处理 - 在
connection
事件内部监听authentication
事件,这个事件是需要客户端来触发的。 - 从
connection
事件触发时开始,使用计时经过timeout时间后如果还没有标记为已验证,就主动断开连接。
这里主要是注册事件做准备工作。