Foxx Session Storages

Session storages are used by the sessions middleware to persist sessions across requests. Session storages must implement the fromClient and forClient methods and can optionally implement the new method.

The built-in session storages generally provide the following attributes:

  • uid: string (Default: null)

    A unique identifier indicating the active user.

  • created: number (Default: Date.now())

    The numeric timestamp of when the session was created.

  • data: any (Default: null)

    Arbitrary data to persisted in the session.

new

storage.new(): Session

Generates a new session object representing an empty session. The empty session object should not be persisted unless necessary. The return value will be exposed by the middleware as the session property of the request object if no session identifier was returned by the session transports and auto-creation is not explicitly disabled in the session middleware.

Examples

new() {
  return {
    uid: null,
    created: Date.now(),
    data: null
  };
}

fromClient

storage.fromClient(sid): Session | null

Resolves or deserializes a session identifier to a session object.

Arguments

  • sid: string

    Session identifier to resolve or deserialize.

Returns a session object representing the session with the given session identifier that will be exposed by the middleware as the session property of the request object. This method will only be called if any of the session transports returned a session identifier. If the session identifier is invalid or expired, the method should return a null value to indicate no matching session.

Examples

fromClient(sid) {
  return db._collection('sessions').firstExample({_key: sid});
}

forClient

storage.forClient(session): string | null

Derives a session identifier from the given session object.

Arguments

  • session: Session

    Session to derive a session identifier from.

Returns a session identifier for the session represented by the given session object. This method will be called with the session property of the request object unless that property is empty (e.g. null).

Examples

forClient(session) {
  if (!session._key) {
    const meta = db._collection('sessions').save(session);
    return meta._key;
  }
  db._collection('sessions').replace(session._key, session);
  return session._key;
}