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;
}
相關文章
相關標籤/搜索