【发布时间】:2012-09-27 03:23:03
【问题描述】:
第一个问题
我试图弄清楚会话、商店、授权和redis。如果它很重要,我使用Express@3.0.0rc4。我知道我有两个选项可以输入我的RedisStore()。我用哪一个?我两个都用吗?
express.session({secret: 'secret', key: 'key', store: new RedisStore()});
io.set('store', new RedisStore());
我已经在运行 node.js、express 和 socket.io。所以现在我正在尝试实现redis,但我不知道如何使用会话/存储来实现授权,也不知道如何写入redis数据库。我还没有找到任何关于此的文档。我找到了一个使用socket.io and express 讨论会话和存储但没有redis 的网站,另一个讨论会话和存储using all three,但它不使用io.set('store', ...)。
我也不知道我是否应该使用两种不同的商店,一种用于express,一种用于socket.io,或者我应该只使用一种。请看示例进行说明:
//Redis Variables
var redis = require('socket.io/node_modules/redis');
var RedisStore = require('socket.io/lib/stores/redis');
var pub = redis.createClient();
var sub = redis.createClient();
var client = redis.createClient();
var redis_store = new RedisStore({
redisPub: pub,
redisSub: sub,
redisClient: client
});
app.configure(function(){
//...code goes here...
app.use(express.session({
secret: 'secret',
key: 'key',
store: redis_store //Notice I'm using redis_store
}));
//...more code...
});
io.configure(function(){
io.set('store', redis_store); //Notice it's the same RedisStore() being used
});
我是否为每个人使用相同的RedisStore()?我是否为每个创建单独的?我只使用express 还是socket.io?我真正想要的是能够对客户端进行身份验证(我假设这是通过会话完成的)并让他们在连接时更新 redis 数据库——记录人们何时访问我的网站。这导致了我的第二个问题。
第二个问题
所以我不知道如何从这一点访问和编辑redis数据库。由于我的第一个问题,我无法对此进行测试,但我认为它会是这样的:
io.sockets.on('connection', function(socket){
var session = socket.handshake.session;
redis.put(session);
});
我也没有看到任何关于如何从 node.js 中更新 redis 数据库的文档,所以我非常怀疑 redis.put() 是正确的术语哈哈。我访问过redis's website,但找不到node.js 的命令。只是从命令行使用常规 redis 的命令。无论如何,如果有人至少可以为我指出正确的方向,那就太好了。谢谢。 :)
【问题讨论】:
-
注意:如果你最终在你的 redis 存储上使用了密码,你需要将 redis 模块本身作为你的 RedisStore 构造函数的一部分传递到 'redis' 键下。欲了解更多信息,请参阅:stackoverflow.com/questions/13438613/…
标签: node.js session express redis socket.io