Giter VIP home page Giter VIP logo

firestore-store's Introduction

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

const parser = {
  read(doc) {  
    return JSON.parse(doc.session);
  },

  // custom save method which also adds date when modified.
  save(doc) {
    return {
      session: JSON.stringify(doc),
      dateModified: Date.now()
    };
  }
};

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 6, 8, 10, 12, 13. 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 ⭐ it on Github so I know to put more time into supporting it.

License

MIT License

firestore-store's People

Contributors

hendrysadrak avatar dependabot-preview[bot] avatar dependabot[bot] avatar kariem avatar garcia-s avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.