为什么写这篇

看到不少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相关推荐

  1. Android Hal层简要分析

    Android Hal层简要分析 Android Hal层(即 Hardware Abstraction Layer)是Google开发的Android系统里上层应用对底层硬件操作屏蔽的一个软件层次, ...

  2. Android L Settings 简要分析

    1.本文说明 本文主要针对L平台上Settings模块正常启动流程做一个简要分析,并试着分析一下Settings下面Storage选项的实现过程. 2.Settings概览 在之前的KK平台上Sett ...

  3. android root权限破解分析

    破解android的root权限的本质是:在系统中加入一个任何用户都可能用于登陆的su命令.或者说替换掉系统中的su程序,因为系统中的默认su程序需要验证实际用户权限,只有root和 shell用户才 ...

  4. Android课程表架构简要分析

    之前一直是课程格子的忠实粉丝,非常喜欢它提供的课表功能,所以趁着毕业有时间学习了Android,历时一个月写出了一个功能较全面的课表APP,名字暂时叫Miao课表,先上效果图吧. 实现思路 整体功能结 ...

  5. android权限控制泄露,Android应用的权限泄露分析

    摘要: 随着智能移动终端功能和用户体验的日益完善,智能手机已经被越来越多的用户使用.研究数据表明,Android手机的购买量正在逐步超越个人电脑.Android系统被应用在越来越多的智能手机上面,但是 ...

  6. Android 5.1 Settings源码简要分析

    概述: 先声明:本人工作快两年了,仍是菜鸟级别的,惭愧啊!以前遇到好多知识点都没有记录下来,感觉挺可惜的,现在有机会接触Android 源码.我们一个Android组的搞Setting,我觉得是得写得 ...

  7. Android `AsyncTask`简要分析

    Android `AsyncTask`简要分析 AsyncTask简要分析 经典异步任务:AsyncTask,使用场景有:批量下载,批量拷贝等.官方文档就直接给出了一个批量下载的示例. private ...

  8. Android自定义权限CVE漏洞分析 (IEEE论文)

    文章目录 前言 自定义权限早期漏洞 1.1 Android权限机制 1.2 自定义权限升级漏洞 1.3 confused deputy attack 自定义权限近期漏洞 2.1 黑盒Fuzz工具原理 ...

  9. Android踩坑日记:Android动态权限分析和解决方案

    关于运行时权限 在旧的权限管理系统中,权限仅仅在APP安装时询问一次,用户同意了这些权限App才能安装,APP一旦安装后就可以偷偷做很多不为人知的事情. 我们知道从Android6.0开始,App可以 ...

最新文章

  1. Android硬件抽象层(HAL)深入剖析(一)
  2. 山西出台法规规范社会力量认养文物 系全国首例
  3. 数据中台到底包括什么内容?一文详解架构设计与组成
  4. 珍惜机会,去爱你身边的人!生命的箴言
  5. C++ while(cin>>a) cin输入直到回车结束
  6. layui和jquery冲突:Syntax error, unrecognized expression: +
  7. Try to use JDK instead of JRE to debug source code
  8. 我的学习开发环境,呵呵!
  9. 简单、有效、全面的Kubernetes监控方案
  10. P2898 [USACO08JAN]haybale猜测Haybale Guessing
  11. cpu渲染测试软件,CPU多核项目大比拼 Corona渲染器测试
  12. 端午节谋定顺应自然-农业大健康·万祥军:根植古代农耕文化
  13. 【Elementory OS 6】安装 tweak
  14. NY--234 -- 吃土豆 [二维动态规划]
  15. Python爬虫是什么?
  16. 大猩猩优化算法(Matlab代码实现)
  17. 上海交大团队制备全球最大规模的光量子计算芯片
  18. 好用的工作邮箱有哪些?工作邮箱如何登录
  19. VBA中byref类型不匹配 ByRef Argument Type Mismatch错误
  20. java葱_Java程序设计_网课答案

热门文章

  1. 什么是网站地图,网站地图可以做什么?
  2. html函数splice,js splice方法怎么用?
  3. biee12c连接hive_BIEE12c 迁移
  4. 多线程编程-矩阵乘法
  5. 你不知道的搜索引擎之高效率搜索
  6. 计算机小宝,小宝听听电脑版
  7. jquery html() 乱码,jquery中文乱码怎么解决?
  8. HTML显示中文乱码
  9. chatgpt赋能python:Python中E等于多少
  10. 用粉末冶金制造抗磨轴承的方法