socket.io的用户认证

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

 

最近在写一个聊天室来学习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;
}

转载于:https://www.cnblogs.com/asie-huang/p/6611209.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值