Socket
Book a DemoInstallSign in
Socket

firestore-store

Package Overview
Dependencies
Maintainers
1
Versions
17
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

firestore-store

Firestore session store for Express.js

2.0.2
latest
Source
npmnpm
Version published
Weekly downloads
702
57.75%
Maintainers
1
Weekly downloads
 
Created
Source

firestore-store Build Status

Firestore session store for Express.js / Connect.

Source of this library is written in ES6 but commonjs exports are used. If you have any problems or questions let me know in issues.

Installation

firebase-admin is a required peer dependency for firestore-store.

npm install firebase-admin firestore-store --save

Usage with Express.js / Connect

Initialize firebase-admin firestore database.

const admin = require("firebase-admin");

const firebase = admin.initializeApp({
	credential: admin.credential.cert("path/to/serviceAccountCredentials.json"),
	databaseURL: "https://<DATABASE_URL>.firebaseio.com",
});

const database = firebase.firestore();

Pass express-session to firestore-store

const session = require("express-session");
const FirestoreStore = require("firestore-store")(session);

Pass database reference to the FirestoreStore.

express() // or connect
	.use(
		session({
			store: new FirestoreStore({
				database: database,
			}),

			secret: "keyboard cat",
			resave: true,
			saveUninitialized: true,
		})
	);

Usage in Cloud Functions or Cloud Run

When using Firebase Hosting together with Cloud Functions or Cloud Run, cookies are stripped from incoming requests. This would normally prevent the session lookup mechanism from working. However, when using __session as the name, the value will be passed through to the app.

express() // or connect
	.use(
		session({
			store: new FirestoreStore({
				database: database,
			}),

			name: "__session", // ← required for Cloud Functions / Cloud Run
			secret: "keyboard cat",
			resave: true,
			saveUninitialized: true,
		})
	);

Refer to Using Cookies in the Firebase Documentation on Caching

Options

const store = new FirestoreStore(options);

options.database (required)

Firestore reference.

options.collection (default: 'sessions', optional)

Collection name to use for sessions.

options.parser (default: DocParser, optional)

Parser used to save or read session info from session document. If you need custom functionality or want to add more properties you can implement such a parser yourself. Required is to have read and save methods. Check default parser DocParser

Example of a custom parser adding dateModified field:
const parser = {
	read(doc) {
		return JSON.parse(doc.session);
	},

	save(doc) {
		return {
			session: JSON.stringify(doc),
			dateModified: Date.now(),
		};
	},
};

const store = new FirestoreStore({ parser });
Example of a custom parser storing the session in the firestore without stringifying:

https://github.com/hendrysadrak/firestore-store/issues/57#issue-718419725

const parser = {
	read(doc) {
		return doc;
	},

	save(doc) {
		return JSON.parse(JSON.stringify(doc));
	},
};

const store = new FirestoreStore({ parser });

Compatibility

This store implements all the required, recommended and optional methods of the express-session store.

Currently tested with node.js version 10, 12 & 14. Travis is used for running tests https://travis-ci.org/hendrysadrak/firestore-store

Support

If you have any problems or questions let me know in issues.

If you see it as a useful library star :star: it on Github so I know to put more time into supporting it.

License

MIT License

Keywords

connect

FAQs

Package last updated on 11 Nov 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.