socket.io的用户认证

一直专心于写代码,遇到问题便看别人的博客来解决问题,忽然感受本身也应该写点东西帮助别人来解决问题。废话很少说了,直接切入正题~node

 

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

 

这个问题我在网上查了不少资料,大多都写的很是复杂,后来经本身实践,其实只须要给io加一个跟express用的中间件同样就能够了,能parse出来彻底同样的user。一行代码赛过千言万语。附上两个middleware的代码(路径自行调整):mongodb

 

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

 

1. ajax用的中间件npm

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
});

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

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

 

 

2. io用的中间件session

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

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

引用该中间件方式:app

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;
}
相关文章
相关标签/搜索