Open danrocha opened 6 years ago
Maybe you can check out this module as an example.
https://github.com/eggjs/egg-session-redis/blob/master/app.js#L12
Thanks! Is this going in the right direction?
// middleware/installSession.js
const session = require('koa-session');
const RedisStore = require('koa-redis');
const ONE_DAY = 1000 * 60 * 60 * 24;
module.exports = function installSession(app) {
app.keys = [process.env.SECRET];
app.use(session({
store: new RedisStore({
url: process.env.REDIS_URL,
key: process.env.REDIS_STORE_KEY,
async get(key) {
const res = await redis.get(key);
if (!res) return null;
return JSON.parse(res);
},
async set(key, value, maxAge) {
maxAge = typeof maxAge === 'number' ? maxAge : ONE_DAY;
value = JSON.stringify(value);
await redis.set(key, value, 'PX', maxAge);
},
async destroy(key) {
await redis.del(key);
},
})
}, app));
};
Then in my main server file:
// server.js
...
const middleware = require('./middleware');
const app = new Koa();
const server = http.createServer(app.callback());
// session middleware
middleware.installSession(app);
// other middleware, which also get app as a parameter
middleware.installFirebaseAuth(app);
...
const PORT = parseInt(process.env.PORT, 10) || 3000;
server.listen(PORT);
console.log(`Listening on port ${PORT}`);
But then how do I access the session and its methods from inside other middlewares? Like in the installFirebaseAuth
middleware, I want to finally get/set session values:
...
module.exports = function installFirebaseAuth(app, { rootPgPool }) {
...
const verifyAccessToken = async (ctx, next) => {
...
const accessToken = getAccessToken(ctx);
const fid = getFID(ctx);
const getRedisKey = sprintf(process.env.REDIS_STORE_KEY, {
fid
});
// trying to access the session, none work
console.log('ctx.session', ctx.session);
console.log('ctx.session.get():', ctx.session.get(getRedisKey));
console.log('ctx.req.session', ctx.req.session);
const redisValue = await ctx.req.session.get(getRedisKey);
...
}
}
ctx.session
returns {}
ctx.session.get()
returns ctx.session.get is not a function
ctx..req.session
returns undefined
Any clues? Thanks!!
@danrocha I got the same error with store get, set function finally, I change to use koa-session2 and ioredis maybe you should check out this issues https://github.com/Secbone/koa-session2/issues/39
The usage keep the same with cookie base session, you just set value by ctx.session=
and get user's session data from ctx.session
you can check out the test cases for more examples for how to use:
https://github.com/koajs/session/blob/master/test/store.test.js
I have the same problem.Any examples?Thanks in advance.
Check out below for an in-memory session store: https://github.com/jmitchell38488/koa-session-local
The docs describe an object must have the set
, get
and destroy
functions. It can be defined however you like, as long as the object passed contains those three functions.
I would love to get this working for my case, but I find the following part of the readme extremely cryptic:
set
method, what is thesess
parameter?Would anyone be kind enough to add an example of the above (especially using redis)? I searched everywhere and it is still a mystery to me how to get it working...
Thanks!! Daniel