从socket.io新的cookie值不工作?(new cookie value from sock

2019-09-17 14:00发布

我尝试使用socket.io ID为多个浏览器窗口/页。 它是利用SNS-auth的过程everyauth ,该项目是基于快递 。

这里是我的项目设计:

一个完整的AJAX主页保持socket.io连接。 不重装,不重定向等。

当用户试图通过一些SNS账号登录,一个弹出窗口打开,这将是everyauth和SNS验证管理。 里面的弹出窗口,会出现很多重定向,但主窗口是持久的,所以作为socket.io连接。

最后,成功的授权之后,everyauth重定向在弹出的窗口“authdone.html”。

在浏览器中,这个弹出窗口不再有用,所以window.close()的;

但是,一个成功的登录信息可以在整个everyauth获得,但对我来说,因为我不完全需要明确的框架,会话管理,因为我打算做的是会话管理通过socket.IO Cookie是更重要的。

app.get('*',
    function (req, res)
    { 
        console.log("----------get------------");
        console.log(req.url);
        if (req.url == '/public/authdone.html')
        {
            console.log("----------get /public/authdone.html------------");
            console.log(req.cookies);  
            // express(connect) sessionID(sid) cookie available here.
            //{ 'connect.sid': '2DLlayNx90wtTsyeq5w83N9g.Kc1ZFd8I7omf6u4fk4FFyKAt4dP1V6IufSf1ZtRudVI' }
        }
        onreq(req, res);
    });

现在,我设法通过重定向到登录页面(/public/authdone.html)在弹出的窗口上的cookie获得快递会话ID,但是,这是不够的。 我还需要在cookie来这里获得socket.IO导向的ID。

其实,我在这里感到困惑,并问了一个问题。 添加上Socket.IO cookie的值

由于韦斯,我稍微找到一种方法,下面添加一个新的cookie值(在我的情况下,一些套接字客户端ID):

io.configure(function ()
{
    io.set('authorization', function (handshake, callback)
    {
        if (handshake.headers.cookie)
        {
            var cookie = handshake.headers.cookie;
            var newS = ";" 
                + "socketClientID" + "=" 
                + "999999999999999";// eventually randomize for every client
            cookie += newS;
            console.log("=========================================");
            console.log(cookie);  
        } else
        {
            return callback('Cookie not found', false);
        }
        callback(null, true);
    });
});

在此块中,我添加一个cookie值为“socketClientID = 999999999999999”

所以通过的console.log当前的cookie输出

connect.sid=fc2iTJW3ETD7nIyxI5ZwpayK.S0qGhp1Ryw7Msg2r03yB6g822qVZIZTbZyWUSpQL0aU;
socketClientID=999999999999999

到目前为止好,但是,everyauth重定向的页面上,我仍然得到

----------get /public/authdone.html------------  
{ 'connect.sid': 'fc2iTJW3ETD7nIyxI5ZwpayK.S0qGhp1Ryw7Msg2r03yB6g822qVZIZTbZyWUSpQL0aU' }

仅表达的sessionID(connect.sid)可以通过该Cookie来获得,加在socket.IO握手阶段clientID的cookie值不被反射。

我真的需要帮助。 谢谢。

Answer 1:

好吧,我发现我需要配置这种饼干的形成客户端。

从io.sockets.on( '连接',函数(客户端)发射socketClientID ...

要么

从客户端发出和回调的socketClientID。

我用https://github.com/carhartl/jquery-cookie客户端cookie管理。



文章来源: new cookie value from socket.io doesn't work?