android socketio权限,简要分析socketio-auth
为什么写这篇
看到不少noder在问socket.io如何控制权限这类问题,想到去年在echojs还是HackerNews上看到的socketio-auth模块,还是一定程度上解决这类问题的,尽管它的实现相当简单,但至少提供了一个思路。
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 超时时间,等待用户验证的时间毫秒数,超过这个时间就会强制断开了
在这个过程干了这么几件事:
给socket.io绑定connection事件处理
在connection事件内部监听authentication事件,这个事件是需要客户端来触发的。
从connection事件触发时开始,使用计时经过timeout时间后如果还没有标记为已验证,就主动断开连接。
这里主要是注册事件做准备工作。
2.客户端连接并进行验证
客户端在连接后,emit一个authentication事件并附带验证信息。
这时就会进入到验证流程里了,首先将信息传入authenticate方法里进行诸如查DB的验证过程。
//验证
config.authenticate(data, function(err, success) {
if (success) {
debug('Authenticated socket %s', socket.id);
socket.auth = true;
...
} else if (err) {
...
} else {
...
}
});
//验证的实现
function authenticate(data, callback) {
var username = data.username;
var password = data.password;
db.findUser('User', {username:username}, function(err, user) {
if (err || !user) return callback(new Error("User not found"));
return callback(null, user.password == password);
}
}
回调时看是否成功,成功就可以对连接进程标记了(稍后就不会被强制断开)。
成功时会调用postAuthenticate函数,比如将user信息绑定到连接或者其他的什么,总之,这个不是必须的。
3.返回状态给客户端
成功
socket.emit('authenticated', success);
失败
//error
socket.emit('unauthorized', {message: err.message}, function() {
socket.disconnect();
});
//fail
socket.emit('unauthorized', {message: 'Authentication failure'}, function() {
socket.disconnect();
});
后续任由客户端发挥了。
4.服务端还有一件小事要完成
那就是在timeout时间过后判断是否已验证,否则强制断开连接。
setTimeout(function() {
// If the socket didn't authenticate after connection, disconnect it
if (!socket.auth) {
debug('Disconnecting socket %s', socket.id);
socket.disconnect('unauthorized');
}
}, timeout);
完…
追加
android socketio权限,简要分析socketio-auth相关推荐
- Android Hal层简要分析
Android Hal层简要分析 Android Hal层(即 Hardware Abstraction Layer)是Google开发的Android系统里上层应用对底层硬件操作屏蔽的一个软件层次, ...
- Android L Settings 简要分析
1.本文说明 本文主要针对L平台上Settings模块正常启动流程做一个简要分析,并试着分析一下Settings下面Storage选项的实现过程. 2.Settings概览 在之前的KK平台上Sett ...
- android root权限破解分析
破解android的root权限的本质是:在系统中加入一个任何用户都可能用于登陆的su命令.或者说替换掉系统中的su程序,因为系统中的默认su程序需要验证实际用户权限,只有root和 shell用户才 ...
- Android课程表架构简要分析
之前一直是课程格子的忠实粉丝,非常喜欢它提供的课表功能,所以趁着毕业有时间学习了Android,历时一个月写出了一个功能较全面的课表APP,名字暂时叫Miao课表,先上效果图吧. 实现思路 整体功能结 ...
- android权限控制泄露,Android应用的权限泄露分析
摘要: 随着智能移动终端功能和用户体验的日益完善,智能手机已经被越来越多的用户使用.研究数据表明,Android手机的购买量正在逐步超越个人电脑.Android系统被应用在越来越多的智能手机上面,但是 ...
- Android 5.1 Settings源码简要分析
概述: 先声明:本人工作快两年了,仍是菜鸟级别的,惭愧啊!以前遇到好多知识点都没有记录下来,感觉挺可惜的,现在有机会接触Android 源码.我们一个Android组的搞Setting,我觉得是得写得 ...
- Android `AsyncTask`简要分析
Android `AsyncTask`简要分析 AsyncTask简要分析 经典异步任务:AsyncTask,使用场景有:批量下载,批量拷贝等.官方文档就直接给出了一个批量下载的示例. private ...
- Android自定义权限CVE漏洞分析 (IEEE论文)
文章目录 前言 自定义权限早期漏洞 1.1 Android权限机制 1.2 自定义权限升级漏洞 1.3 confused deputy attack 自定义权限近期漏洞 2.1 黑盒Fuzz工具原理 ...
- Android踩坑日记:Android动态权限分析和解决方案
关于运行时权限 在旧的权限管理系统中,权限仅仅在APP安装时询问一次,用户同意了这些权限App才能安装,APP一旦安装后就可以偷偷做很多不为人知的事情. 我们知道从Android6.0开始,App可以 ...
最新文章
- Android硬件抽象层(HAL)深入剖析(一)
- 山西出台法规规范社会力量认养文物 系全国首例
- 数据中台到底包括什么内容?一文详解架构设计与组成
- 珍惜机会,去爱你身边的人!生命的箴言
- C++ while(cin>>a) cin输入直到回车结束
- layui和jquery冲突:Syntax error, unrecognized expression: +
- Try to use JDK instead of JRE to debug source code
- 我的学习开发环境,呵呵!
- 简单、有效、全面的Kubernetes监控方案
- P2898 [USACO08JAN]haybale猜测Haybale Guessing
- cpu渲染测试软件,CPU多核项目大比拼 Corona渲染器测试
- 端午节谋定顺应自然-农业大健康·万祥军:根植古代农耕文化
- 【Elementory OS 6】安装 tweak
- NY--234 -- 吃土豆 [二维动态规划]
- Python爬虫是什么?
- 大猩猩优化算法(Matlab代码实现)
- 上海交大团队制备全球最大规模的光量子计算芯片
- 好用的工作邮箱有哪些?工作邮箱如何登录
- VBA中byref类型不匹配 ByRef Argument Type Mismatch错误
- java葱_Java程序设计_网课答案