Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/benweier/connect-session-firebase
A Connect/Express session store powered by the Firebase Realtime Database.
https://github.com/benweier/connect-session-firebase
connect cookie database express firebase node session
Last synced: 2 days ago
JSON representation
A Connect/Express session store powered by the Firebase Realtime Database.
- Host: GitHub
- URL: https://github.com/benweier/connect-session-firebase
- Owner: benweier
- License: mit
- Created: 2016-06-18T11:27:01.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-06-01T19:56:42.000Z (over 1 year ago)
- Last Synced: 2024-08-08T19:57:30.322Z (3 months ago)
- Topics: connect, cookie, database, express, firebase, node, session
- Language: JavaScript
- Homepage:
- Size: 2.04 MB
- Stars: 39
- Watchers: 5
- Forks: 11
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: HISTORY.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Connect Session Firebase
[![build](https://github.com/benweier/connect-session-firebase/actions/workflows/main.yml/badge.svg)](https://github.com/benweier/connect-session-firebase/actions/workflows/main.yml)
[![codecov](https://codecov.io/gh/benweier/connect-session-firebase/branch/master/graph/badge.svg?token=B5d97oXnOM)](https://codecov.io/gh/benweier/connect-session-firebase)`connect-session-firebase` is a Connect/Express compatible session store backed by the [Firebase SDK](https://firebase.google.com/docs/admin/setup).
## Installation
`firebase-admin` must be added as a peer dependency, or you're gonna have a bad time. `connect-session-firebase` expects a only matching `major` version of Firebase, i.e. any `[email protected]` version will expect any `[email protected]` version peer dependency.
$ npm install firebase-admin connect-session-firebase --save
## Options
- `database` A pre-initialized Firebase Database app instance.
- `sessions` (optional) A child reference string for session storage. (defaults to "sessions")
- `reapInterval` (optional) How often expired sessions should be cleaned up. (defaults to `21600000`, 6 hours in milliseconds)
- `reapCallback` (optional) A callback function to execute whenever a session clean up occurs.
- `errorIfSessionNotFound` (optional) Return an error object to the callback if a session doesn't exist. Only useful if you want to log when a session is no longer available. (defaults to `false`)## Usage
Initialize `firebase-admin` database and pass the instance to `FirebaseStore`. Connecting to the database requires a credential cert via a JSON file from the [Firebase IAM & Admin Console](https://console.firebase.google.com/iam-admin/projects).
- [Connect](http://senchalabs.github.io/connect)
```js
const connect = require('connect')
const FirebaseStore = require('connect-session-firebase')(connect)
const firebase = require('firebase-admin')
const ref = firebase.initializeApp({
credential: firebase.credential.cert('path/to/serviceAccountCredentials.json'),
databaseURL: 'https://databaseName.firebaseio.com',
})connect()
.use(connect.cookieParser())
.use(
connect.session({
store: new FirebaseStore({
database: ref.database(),
}),
secret: 'keyboard cat',
}),
)
```- [Express](http://expressjs.com)
**NOTE:** In Express 4 `express-session` must be passed to the function `connect-session-firebase` exports in order to extend `express-session.Store`:
```js
const express = require('express');
const session = require('express-session');
const FirebaseStore = require('connect-session-firebase')(session);
const firebase = require('firebase-admin');
const ref = firebase.initializeApp({
credential: firebase.credential.cert('path/to/serviceAccountCredentials.json'),
databaseURL: 'https://databaseName.firebaseio.com'
});express()
.use(session({
store: new FirebaseStore({
database: ref.database()
}),
secret: 'keyboard cat'
resave: true,
saveUninitialized: true
}));
```## Security
If you use a publicly available Firebase Database, please set proper rules:
```json
{
"rules": {
".read": "false",
".write": "false",
"sessions": {
".read": "false",
".write": "false"
},
"some_public_data": {
".read": "true",
".write": "auth !== null"
}
}
}
```Learn more about Firebase rules: https://firebase.google.com/docs/database/security/
## Tests
To run tests against `connect-session-firebase` you will need your own Firebase Database app available.
Checkout the repo locally and create two files in the project root:
- .env
- serviceAccountCredentials.jsonWith the content:
**.env**
```
FIREBASE_SERVICE_ACCOUNT=./serviceAccountCredentials.json
FIREBASE_DATABASE_URL=https://[databaseName].firebaseio.com
```**serviceAccountCredentials.json**
```
{
"type": "service_account",
"project_id": "",
"private_key_id": "",
"private_key": "",
"client_email": "",
"client_id": "",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": ""
}
```Install the dev dependencies:
$ npm install
Run the tests:
$ npm test
## License
`connect-session-firebase` is licensed under the [MIT license](https://github.com/benweier/connect-session-firebase/blob/master/LICENSE).