前缀在 connect-redis 中重复
Prefix getting repeated in connect-redis
我正在尝试在我的网络应用程序中使用 connect-redis: "~3.0.1" 和 express-session: "~1.12.1" 来存储用户会话。但是当我在 RedisStore 中给出前缀字段时,它会重复两次。请告诉我是否做错了什么。
"mySession:mySession:yzO1mRhloENUMYLkAz2nZprcfvcFMNHY"
"mySession:mySession:0L8prCJAoq0CmJ9tTwTJ_smQ4fH2R_H9"
在搜索时我遇到了与 laravel 代码类似的问题:
https://github.com/laravel/framework/issues/5353
请告知这里是否发生了类似的事情,如果是,解决方法是什么。
下面是我使用的代码:
var sessionMiddleware = session({
secret : 'secretPass',
store: new RedisStore({
prefix:'mySession:',
ttl: 1800}),
resave: false,
saveUninitialized: false
});
app.use(function (req, res, next) {
var tries = 3;
function lookupSession(error) {
if (error) {
return next(error);
}
tries -= 1
if (req.session !== undefined) {
return next();
}
if (tries < 0) {
var errorMsg = 'Error in getting session. Please refresh the page.';
return next(new Error(errorMsg));
}
sessionMiddleware(req, res, lookupSession);
}
lookupSession();
})
我能够通过预先创建 redis 客户端并将其传递给下面提到的会话对象来解决这个问题,而不是依赖于 connect-redis 来为我创建它。
redis_client = require('redis').createClient();
var sessionMiddleware = session({
secret : 'secretPass',
store: new RedisStore({
prefix:'mySession:',
ttl: 1800,
client: redis_client}),
resave: false,
saveUninitialized: false
});
如果我不传递客户端,connect-redis.js 中的以下代码会在创建 redis 客户端时传递选项,然后添加一个额外的前缀。
// convert to redis connect params
if (options.client) {
this.client = options.client;
}
else if (options.socket) {
this.client = redis.createClient(options.socket, options);
}
else {
this.client = redis.createClient(options);
}
我正在尝试在我的网络应用程序中使用 connect-redis: "~3.0.1" 和 express-session: "~1.12.1" 来存储用户会话。但是当我在 RedisStore 中给出前缀字段时,它会重复两次。请告诉我是否做错了什么。
"mySession:mySession:yzO1mRhloENUMYLkAz2nZprcfvcFMNHY" "mySession:mySession:0L8prCJAoq0CmJ9tTwTJ_smQ4fH2R_H9"
在搜索时我遇到了与 laravel 代码类似的问题:
https://github.com/laravel/framework/issues/5353
请告知这里是否发生了类似的事情,如果是,解决方法是什么。
下面是我使用的代码:
var sessionMiddleware = session({
secret : 'secretPass',
store: new RedisStore({
prefix:'mySession:',
ttl: 1800}),
resave: false,
saveUninitialized: false
});
app.use(function (req, res, next) {
var tries = 3;
function lookupSession(error) {
if (error) {
return next(error);
}
tries -= 1
if (req.session !== undefined) {
return next();
}
if (tries < 0) {
var errorMsg = 'Error in getting session. Please refresh the page.';
return next(new Error(errorMsg));
}
sessionMiddleware(req, res, lookupSession);
}
lookupSession();
})
我能够通过预先创建 redis 客户端并将其传递给下面提到的会话对象来解决这个问题,而不是依赖于 connect-redis 来为我创建它。
redis_client = require('redis').createClient();
var sessionMiddleware = session({
secret : 'secretPass',
store: new RedisStore({
prefix:'mySession:',
ttl: 1800,
client: redis_client}),
resave: false,
saveUninitialized: false
});
如果我不传递客户端,connect-redis.js 中的以下代码会在创建 redis 客户端时传递选项,然后添加一个额外的前缀。
// convert to redis connect params
if (options.client) {
this.client = options.client;
}
else if (options.socket) {
this.client = redis.createClient(options.socket, options);
}
else {
this.client = redis.createClient(options);
}