koa-session-ts
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.
Install
npm install koa-session-ts --save
Usage
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();
});Options
-
keycookie name, defaulting tokoa.sid -
storesession store instance, default is a MemoryStore -
reconnectTimeoutstore reconnectTimeout inms, default is oneday -
cookieOptionssession cookie settings, default is{ httpOnly: true, maxAge: 86400000, // one day in ms overwrite: true, path: '/', secure: false, signed: false, } -
deferdefer get session, you shouldawait this.sessionto get the session if defer is true, default is false -
rollingrolling session, always reset the cookie and sessions, default is false -
allowEmptyallow session empty, default is false -
genSidyou can use your own generator for sid -
errorHanlderhandler for session store get or set error -
validvalid(ctx, session), valid session value before use it -
beforeSavebeforeSave(ctx, session), hook before save session
Session Store
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 sid -
set(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.
DISCONNECTCONNECT