一直专心于写代码,遇到问题便看别人的博客来解决问题,突然感觉自己也应该写点东西帮助别人来解决问题。废话不多说了,直接切入正题~

最近在写一个聊天室来学习node和socket相关知识。遇到的问题描述:ajax请求可以通过express-session来parse出目前用户,但socket请求我也想验证是否是登录用户,这个怎么做呢?

这个问题我在网上查了很多资料,大多都写的非常复杂,后来经自己实践,其实只需要给io加一个跟express用的中间件一样就可以了,能parse出来完全一样的user。一行代码胜过千言万语。附上两个middleware的代码(路径自行调整):

本例使用mongodb存储session, 使用到了connect-mongodb-session插件。

1. ajax用的中间件

var session = require('express-session');
var MongoDBStore = require('connect-mongodb-session')(session);
var dbSettings = require('../db/settings'); module.exports = session({
secret: dbSettings.COOKIE_SECRET,
cookie: {
maxAge: 1000 * 60 * 60 * 24 * 7 // 1 week
},
store: new MongoDBStore({
uri: `mongodb://${dbSettings.HOST}:${dbSettings.PORT}/${dbSettings.DB}`,
collection: 'mySessions'
}),
// Boilerplate options, see:
// * https://www.npmjs.com/package/express-session#resave
// * https://www.npmjs.com/package/express-session#saveuninitialized
resave: true,
saveUninitialized: true
});

引用该中间件方式(细节请自行补充):

var app = express();
var sessionMiddleware = require('./middleware/sessionMiddleware');
app.use(sessionMiddleware);

2. io用的中间件

var sessionMiddleware = require('./sessionMiddleware');

module.exports = function(socket, next) {
sessionMiddleware(socket.handshake, {}, next);
};

引用该中间件方式:

var socketIO = require('socket.io');
var ioSessionMiddleware = require('../middleware/ioSessionMiddleware'); var ioServer = socketIO(server);
ioServer.use(ioSessionMiddleware); ioServer.on('connection', function(socket) {
let session = socket.handshake.session;
}

socket.io的用户认证的更多相关文章

  1. 使用socket.io打造公共聊天室

    最近的计算机网络课上老师开始讲socket,tcp相关的知识,当时脑袋里就蹦出一个想法,那就是打造一个聊天室.实现方式也挺多的,常见的可以用C++或者Java进行socket编程来构建这么一个聊天室. ...

  2. 基于react+react-router+redux+socket.io+koa开发一个聊天室

    最近练手开发了一个项目,是一个聊天室应用.项目虽不大,但是使用到了react, react-router, redux, socket.io,后端开发使用了koa,算是一个比较综合性的案例,很多概念和 ...

  3. 【Spring Boot】集成Netty Socket.IO通讯框架

    服务端 @Configuration public class NettySocketConfig { private static final Logger logger = LoggerFacto ...

  4. 即时通信WebSocket 和Socket.IO

    WebSocket HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯. 在2008年诞生,2011年成为国际标准. 现在基本所有浏览器都已经支持了. We ...

  5. 使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  6. Node.js、Express、Socket.io 入门

    前言 周末断断续续的写了第一个socket.io Demo.初次接触socket.io是从其官网看到的,看着get started做了一遍,根据官网的Demo能提供简单的服务端和客户端通讯. 这个De ...

  7. Socket.IO聊天室~简单实用

    小编心语:大家过完圣诞准备迎元旦吧~小编在这里预祝大家元旦快乐!!这一次要分享的东西小编也不是很懂啊,总之小编把它拿出来是觉地比较稀奇,而且程序也没有那么难,是一个比较简单的程序,大家可以多多试试~ ...

  8. node与socket.io搭配小例子-转载

    //服务端代码 io = require('socket.io').listen(app), fs = require('fs'), cookie=require('cookie'); request ...

  9. socket.io 中文手册 中文文档

    服务端 io.on('connection',function(socket));//监听客户端连接,回调函数会传递本次连接的socket io.sockets.emit('String',data) ...

随机推荐

  1. SpringBoot注解把配置文件自动映射到属性和实体类实战

    SpringBoot注解把配置文件自动映射到属性和实体类实战 简介:讲解使用@value注解配置文件自动映射到属性和实体类 1.配置文件加载 方式一 1.Controller上面配置 @Propert ...

  2. android handlerThread

    一.handlerThread产生的背景

  3. python 历险记(一)— python 的String,集合(List,元组,Dict)

    目录 引言 String 有哪些有用的方法? 如何拼接字符串? 如何分隔字符串? 如何获取字符串长度 如何将 list 拼接成字符串? 如何替换字符串? 如何去除字符串中的空格? 如何子字符串是否包含 ...

  4. python之random模块分析(一)

    random是python产生伪随机数的模块,随机种子默认为系统时钟.下面分析模块中的方法: 1.random.randint(start,stop): 这是一个产生整数随机数的函数,参数start代 ...

  5. STM32F103X datasheet学习笔记---GPIOs and AFIOs

    1.前言 每个GPIO端口有如下几个寄存器进行操作: 两个32位配置寄存器:GPIOx_CRL, GPIOx_CRH 两个32位数据寄存器:GPIOx_IDR, GPIOx_ODR 一个32位set/ ...

  6. C# 关于用7zip压缩文件提示win32exception 系统找不到文件解决方案(win7 x64)

    网上已经很多这方面的资料了,我就简单的说下好了 为了方便以后的查看 --------------------- 1.需要下载7zSharp:http://7zsharp.codeplex.com/re ...

  7. HTML学习笔记01-HTML简介

    主要是为了做接口测试,试着自己写爬虫,所以学习一下HTML一些基础的东西,方便用来解析网页.学习内容主要来自菜鸟教程的HTML教程,W3school的HTML 超文本标记语言(英语:HyperText ...

  8. linux系统切换用户

    无权限上传文件解决办法 1.当前登录的普通用户:user1/password1 2.切换到管理员(user2)用户: sudo su - user2 输入user2用户的密码:password2 或者 ...

  9. PHP获取网卡的MAC地址原码;目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址

    声明转换于其它博客当中的. <?php /** 获取网卡的MAC地址原码:目前支持WIN/LINUX系统 获取机器网卡的物理(MAC)地址 **/ class GetMacAddr{ var $ ...

  10. vw 解决方案

    vw 解决方案 1. 安装并配置PostCss插件 复制代码代码如下: npm i postcss-aspect-ratio-mini postcss-px-to-viewport postcss-w ...