• 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;
    }
  • 相关阅读:
    07.swoole学习笔记--tcp客户端
    06.swoole学习笔记--异步tcp服务器
    04.swoole学习笔记--webSocket服务器
    bzoj 4516: [Sdoi2016]生成魔咒
    bzoj 3238: [Ahoi2013]差异
    bzoj 4566: [Haoi2016]找相同字符
    bzoj 4199: [Noi2015]品酒大会
    后缀数组之hihocoder 重复旋律1-4
    二分查找
    内置函数--sorted,filter,map
  • 原文地址:https://www.cnblogs.com/asie-huang/p/6611209.html
Copyright © 2020-2023  润新知