【问题标题】:How use "cookie-parser" in express right and where are the cookies in socket.io?如何在express中使用“cookie-parser”以及socket.io中的cookie在哪里?
【发布时间】:2014-07-20 22:19:58
【问题描述】:

首先我配置cookie-parser。 https://github.com/expressjs/cookie-parser

var cookieParser = require('cookie-parser');
app.use(cookieParser(secret));

现在是 req.signedCookies 中的 sid 之类的 cookie,但我不需要这个。 如果我与 socket.io 连接,我会以这种方式获取 cookie

io.sockets.on('connection', function (socket){
    var cookies = socket.handshake.headers.cookie;
    // example: io=AGHGDjbasdqwe7zu23h2AAAA; sid=sn$3kjsd23123asdkjdsdasd123
});

现在我的问题是,如何从 cookie 中提取 sid 以及如何取消签名 sid? 如果我使用

io.sockets.on('connection', function (socket){
    cookieParser.signedCookie(socket.handshake.headers.cookie, secret);
});

我得到了同样的结果 io=AGHGDjbasdqwe7zu23h2AAAA; sid=sn$3kjsd23123asdkjdsdasd123

【问题讨论】:

    标签: node.js sockets parsing cookies express


    【解决方案1】:

    你可以使用io.use添加一些authentication middleware,它会解码sid并添加到socket对象中:

    io.use(function (socket, next) {
    
        var data = socket.request;
        if(!data.headers.cookie) 
            return next('No cookie given.', false);
    
        cookieParser(data, {}, function(parseErr) {
    
            if(parseErr)  return next('Error parsing cookies.', false);
    
            var sessionID = (data.secureCookies && data.secureCookies[expressSidKey]) ||
                            (data.signedCookies && data.signedCookies[expressSidKey]) ||
                            (data.cookies && data.cookies[expressSidKey]);
    
            socket.handshake.sid = sessionID; // Add it to the socket object
        });
    });
    

    expressSidKey 类似于 express.sid

    【讨论】:

    • 感谢您的评论。 1.这对我没有帮助,但问题迟早会来自我如何在socket.io中进行身份验证。 2. 我解决了这个问题,所以我使用了两个节点模块(1. cookie,2. cookie-parser)。使用“cookie”我将 cookie 解析为 JSON,然后我选择了我想要的 cookie,然后使用“cookie parser”我取消了 cookie 的签名。 :)
    猜你喜欢
    • 1970-01-01
    • 2018-09-04
    • 2018-03-05
    • 1970-01-01
    • 2014-11-21
    • 2011-04-16
    • 1970-01-01
    • 2012-03-19
    • 2017-07-18
    相关资源
    最近更新 更多