我尝试使用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值不被反射。
我真的需要帮助。 谢谢。