Generic session middleware for koa, easy use with custom stores such as redis or mongo, supports defer session getter.
This middleware will only set a cookie when a session is manually set. Each time the session is modified (and only when the session is modified), it will reset the cookie and session.
You can use the rolling sessions that will reset the cookie and session for every request which touch the session. Save behavior can be overridden per request.
npm install koa-session-ts --save
import * as Koa from "koa";
import session from "koa-session-ts";
const app = new Koa();
app.use(session());
app.use(async ctx => {
// the parsed body will store in ctx.request.body
// if nothing was parsed, body will be an empty object {}
console.log(ctx.session);
console.log(ctx.sessionId);
console.log(ctx.sessionSave);
console.log(ctx.sessionStore);
ctx.regenerateSession();
});
key
cookie name, defaulting tokoa.sid
store
session store instance, default is a MemoryStorereconnectTimeout
store reconnectTimeout inms
, default is onedaycookieOptions
session cookie settings, default is{ httpOnly: true, maxAge: 86400000, // one day in ms overwrite: true, path: '/', secure: false, signed: false, }
defer
defer get session, you shouldawait this.session
to get the session if defer is true, default is falserolling
rolling session, always reset the cookie and sessions, default is falseallowEmpty
allow session empty, default is falsegenSid
you can use your own generator for siderrorHanlder
handler for session store get or set errorvalid
valid(ctx, session), valid session value before use itbeforeSave
beforeSave(ctx, session), hook before save session
You can use any other store to replace the default MemoryStore, it just needs to inherient the BaseStore
and implement the following APIs:
get(sid: string)
: get session object by sidset(sid: string, sess: Session, ttl?: number)
: set session object for sid, with a ttl (in ms)destroy(sid: string)
: destroy session for sid
the api needs to return a Promise, Thunk or generator. And use these events to report the store's status.
DISCONNECT
CONNECT