gpt4 book ai didi

node.js - 如何访问 socket.io 事件中的快速 session ?

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:23 25 4
gpt4 key购买 nike

我目前正在使用express和socket.io,并构建了一个仅接受来自已登录用户的socket.io连接的应用程序。我举了一个简单的例子。特别请参阅 io.sockets.on('connection') 部分:

var express = require('express');

var app = express();
var http = require('http').createServer(app);

var io = require('socket.io').listen(http);

var sessionStore = new express.session.MemoryStore();

io.set('authorization', function (handshake, accept)
{
// I got this from a gist.
// Don't know the link anymore, though.
var cookies = require('express/node_modules/cookie').parse(handshake.headers.cookie);
var parsed = require('express/node_modules/connect/lib/utils').parseSignedCookies(cookies, 'SESSION_SECRET');

sessionStore.get(parsed.sid, function (error, session)
{
if (error != null)
{
accept(error, false);
return;
}

if (session != null && session.user != null)
{
accept(null, true);
}
else
{
accept('Not a logged in user.', false);
}
});
});

io.sockets.on('connection', function (socket)
{
// client with an user object in his session (= logged in)
// connected. But how can I access this session in here?
});

app.use(express.cookieParser('COOKIE_SECRET'));

app.use(express.session({
secret: 'SESSION_SECRET',
key: 'sid',
store: sessionStore
}));

app.use(express.urlencoded());
app.use(express.json());

app.get('/', function (request, response)
{
response.sendfile('static/index.html');
});

app.post('/', function (request, response)
{
request.session.user = null;

var post = request.body;

if (post.username === 'admin' && post.password === 'admin')
{
request.session.user = post;
}

response.redirect('/');
});

http.listen(80);

到目前为止一切正常。只有 session 中有用户(= 他们已登录)的用户才能通过 socket.io 进行连接。但是,当客户实际这样做时,我目前陷入困境,因为我无法在该点获得 session 。

有什么想法吗?

最佳答案

如果我理解了这个问题,那么您希望稍后在某个时刻与您的 socket 对象进行快速 session 。你可以这样做:

if (session != null && session.user != null){
accept(null, true);
handshake.session = session;
}

您可以通过以下方式访问它:

socket.handshake.session

希望这会起作用

关于node.js - 如何访问 socket.io 事件中的快速 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22592760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com