gpt4 book ai didi

node.js - 既然 connect 不再使用 parseCookie 方法,那么我们如何使用 express 获取 session 数据呢?

转载 作者:IT老高 更新时间:2023-10-28 23:08:26 25 4
gpt4 key购买 nike

在 node.js 和 express 中,有很多例子展示了如何获取 session 数据。

当您访问第三个链接时可以看到,它是指向 StackOverflow 的链接。有一个很好的答案,但正如@UpTheCreek 在这些评论中指出的那样,connect 不再具有 parseCookie 方法。我也遇到了这个问题。我发现的所有教程都使用了现在不存在的 connect 的 parseCookie 方法。所以我问他我们如何获得 session 数据,他说他不知道最好的方法,所以我想我会在这里发布问题。在使用 express@3.0.0rc4socket.ioredis 时,我们如何获取 session 数据并使用它来授权用户?我已经能够使用 require('connect').utils.parseSignedCookie;,但是当我这样做时,握手时总是会收到警告/错误,

warn - handshake error Error

从我读过的内容来看,这听起来无论如何都不是一个永久的解决方案。


更新

好的,我让 session.socket.io 在我的服务器上工作。正如我所怀疑的那样,我被困在了授权点。我想我可能会以错误的方式解决这个问题,所以请随时纠正我。在我的 Redis 数据库中,我将拥有用户的信息。他们第一次登录时,我想更新他们的 cookie,以便它包含他们的用户信息。然后下次他们回到网站时,我想检查他们是否有 cookie 以及用户信息是否存在。如果它不存在,我想将它们发送到登录屏幕。在登录屏幕上,当用户提交信息时,它会根据 Redis 数据库测试该信息,如果匹配,它将使用用户信息更新 cookie。我的问题是:

1) 如何通过 RedisStore 更新/更改 cookie?

2) 看起来 session 数据只保存在 cookie 中。如果有人关闭了 cookie,我如何逐页跟踪用户信息?

这是我适用的代码:

//...hiding unapplicable code...
var redis = require('socket.io/node_modules/redis');
var client = redis.createClient();
var RedisStore = require('connect-redis')(express);
var redis_store = new RedisStore();
var cookieParser = express.cookieParser('secret');

app.configure(function(){
//...hiding unapplicable code...
app.use(cookieParser);
app.use(express.session({secret: 'secret', store: redis_store}));
});

//...hiding code that starts the server and socket.io

var SessionSockets = require('session.socket.io');
var ssockets = new SessionSockets(io, redis_store, cookieParser);

io.configure(function(){
io.set('authorization', function(handshake, callback){
if(handshake.headers.cookie){
//var cookie = parseCookie(handshake.headers.cookie);
//if(cookie.user){
// handshake.user = cookie.user;
//}
}
callback(null, true);
});
});

ssockets.on('connection', function(err, socket, session){ ... });

最佳答案

看看 socket.io 的 wiki .尤其是零件Configuring Socket.IOAuthorization and handshaking .

它展示了如何使用带有 RedisStore 的 socket.io 并提供了两种不同的授权方法。

更多关于连接 express v3、redis 和 socket.io 的信息

关于node.js - 既然 connect 不再使用 parseCookie 方法,那么我们如何使用 express 获取 session 数据呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12801027/

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