Koa Session access store клиентское соединение из контекста - PullRequest
0 голосов
/ 18 апреля 2020

Я использую nodejs с koa в качестве фреймворка, плюс koa-session и koa-redis.

import Koa from 'koa';
...
import session from 'koa-session';
import redisStore from 'koa-redis';

const app = new Koa();
app.keys = ["cookieKeys"];
app.use(session({
  maxAge: 5184000000,
  store: redisStore({url: 'redis://localhost:6379'})
}, app));

...
const server = app.listen(1339, () => {
  console.log(`Server listening on port: 1339`);
});

export default server;

Теперь можно установить ctx.session.key = "value"; и получить ctx.sessios.key; на redis, потому что соединение уже установлено.

Как я могу получить доступ к тому же клиенту redis, который используется в хранилище сеансов koa в другом модуле? Сейчас я создаю новое соединение:

import { Context, Next, Middleware } from 'koa';
import redis from 'koa-redis';

export default async (ctx: Context, next: Next): Promise<Middleware> => {
    try {
        return await next();
    } catch (err) {
        if (err.status !== 401) {
            throw err;
        }
        const redisClient = await redis({url: 'redis://localhost:6379'}).client;
        const tokenAccess = ctx.cookies.get('tokenAccess', {signed: true});
        const tokenRefresh = ctx.session.tokenRefresh;
        ...

        const isRefreshTokenRevoked = Number.isInteger(await redisClient.zrank('blacklist', tokenRefresh));
        await redisClient.quit();
        if (isRefreshTokenRevoked) {
            throw err;
        }
        ...
    }
}

Я нашел это свойство в контексте ctx.session._sessCtx.store.client. Правильно ли использовать это свойство для этой цели?

...