All Projects → mweibel → Connect Session Sequelize

mweibel / Connect Session Sequelize

Sequelize SessionStore for Express/Connect

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Connect Session Sequelize

Php Storageless Sessions
Sessions handler which stores session data in HMAC-signed and encrypted cookies
Stars: ✭ 29 (-83.8%)
Mutual labels:  sessions, sessionstorage
Express Sequelize Crud
Simply expose resource CRUD (Create Read Update Delete) routes for Express & Sequelize. Compatible with React Admin Simple Rest Data Provider
Stars: ✭ 65 (-63.69%)
Mutual labels:  sequelize, express
Aclify
🔒 Node Access Control Lists (ACL).
Stars: ✭ 49 (-72.63%)
Mutual labels:  sequelize, express
Express
Express + Sequelize + Winston + Jasmine + TypeScript + Webpack MVC Boilerplate
Stars: ✭ 9 (-94.97%)
Mutual labels:  sequelize, express
Typescript Express Sequelize
Easily bootstrap your NodeJS project with Express, Sequelize and Typescript 👍
Stars: ✭ 129 (-27.93%)
Mutual labels:  sequelize, express
Online Bling
Stars: ✭ 9 (-94.97%)
Mutual labels:  sequelize, express
Sessionstore
Sessionstore is a node.js module for multiple databases. It can be very useful if you work with express or connect.
Stars: ✭ 52 (-70.95%)
Mutual labels:  database, express
Immortaldb
🔩 A relentless key-value store for the browser.
Stars: ✭ 2,962 (+1554.75%)
Mutual labels:  database, sessionstorage
Memorystore
express-session full featured MemoryStore layer without leaks!
Stars: ✭ 79 (-55.87%)
Mutual labels:  express, sessions
Mern Login Signup Component
Minimalistic Sessions based Authentication app 🔒 using Reactjs, Nodejs, Express, MongoDB and Bootstrap. Uses Cookies 🍪
Stars: ✭ 74 (-58.66%)
Mutual labels:  express, sessions
React Express Fullstack
Full stack (mostly unopinionated) starter pack with React+Redux and Expressjs
Stars: ✭ 23 (-87.15%)
Mutual labels:  sequelize, express
Node Express Postgresql Sequelize
Node.js, Express.js, Sequelize.js and PostgreSQL RESTful API
Stars: ✭ 148 (-17.32%)
Mutual labels:  sequelize, express
Securing Restful Apis With Jwt
How to secure a Nodejs RESTful CRUD API using JSON web tokens?
Stars: ✭ 301 (+68.16%)
Mutual labels:  database, express
Nextjs Sequelize
Next.js With Sequelize Web Application, a Full-Stack Web App Development Boilerplate. https://medium.com/@defrian.yarfi/next-js-with-sequelize-web-application-a-full-stack-web-development-a0051074e998
Stars: ✭ 21 (-88.27%)
Mutual labels:  sequelize, database
Nodejs Restful Api
How to create a RESTful CRUD API using Nodejs?
Stars: ✭ 285 (+59.22%)
Mutual labels:  database, express
Meme Studio
📌 A complete and fast website building in React/Express for creating and sharing "internet memes"
Stars: ✭ 51 (-71.51%)
Mutual labels:  sequelize, express
Express Mysql Session
A MySQL session store for the express framework in node
Stars: ✭ 268 (+49.72%)
Mutual labels:  express, sessions
Sequelizer
A GUI Desktop App for export sequelize models from database automatically.
Stars: ✭ 273 (+52.51%)
Mutual labels:  sequelize, database
Pgstore
A Postgres session store backend for gorilla/sessions
Stars: ✭ 66 (-63.13%)
Mutual labels:  sessions, sessionstorage
Sequelize Ui
Browser-based GUI for previewing and generating Sequelize project files.
Stars: ✭ 142 (-20.67%)
Mutual labels:  sequelize, database

Connect Session Store using Sequelize

Build Status

connect-session-sequelize is a SQL session store using Sequelize.js.

Installation

Please note that the most recent version requires express 4. If you use express 3 you should install version 0.0.5 and follow the instructions in the previous README.

$ npm install connect-session-sequelize

Options

  • db a successfully connected Sequelize instance
  • table (optional) a table/model which has already been imported to your Sequelize instance, this can be used if you want to use a specific table in your db
  • modelKey (optional) a string for the key in sequelize's models-object but it is also the name of the class to which it references (conventionally written in Camelcase) that's why it is "Session" by default if table is not defined.
  • tableName (optional) a string for naming the generated table if table is not defined. Default is the value of modelKey.
  • extendDefaultFields (optional) a way add custom data to table columns. Useful if using a custom model definition
  • disableTouch (optional) When true, the store will not update the db when receiving a touch() call. This can be useful in limiting db writes and introducing more manual control of session updates.

Usage

With connect

const connect = require("connect");
// for express, just call it with 'require('connect-session-sequelize')(session.Store)'
const SequelizeStore = require("connect-session-sequelize")(
  connect.session.Store
);

connect().use(
  connect.session({
    store: new SequelizeStore(options),
    secret: "CHANGEME",
  })
);

With express 4:

// load dependencies
var express = require("express");
var Sequelize = require("sequelize");
var session = require("express-session");

// initalize sequelize with session store
var SequelizeStore = require("connect-session-sequelize")(session.Store);

// create database, ensure 'sqlite3' in your package.json
var sequelize = new Sequelize("database", "username", "password", {
  dialect: "sqlite",
  storage: "./session.sqlite",
});

// configure express
var app = express();
app.use(
  session({
    secret: "keyboard cat",
    store: new SequelizeStore({
      db: sequelize,
    }),
    resave: false, // we support the touch method so per the express-session docs this should be set to false
    proxy: true, // if you do SSL outside of node.
  })
);
// continue as normal

If you want SequelizeStore to create/sync the database table for you, you can call sync() against an instance of SequelizeStore along with options if needed. This will run a sequelize sync() operation on the model for an initialized SequelizeStore object :

var myStore = new SequelizeStore({
  db: sequelize,
});
app.use(
  session({
    secret: "keyboard cat",
    store: myStore,
    resave: false,
    proxy: true,
  })
);

myStore.sync();

Session expiry

Session records are automatically expired and removed from the database on an interval. The cookie.expires property is used to set session expiry time. If that property doesn't exist, a default expiry of 24 hours is used. Expired session are removed from the database every 15 minutes by default. That interval as well as the default expiry time can be set as store options:

new SequelizeStore({
  ...
  checkExpirationInterval: 15 * 60 * 1000, // The interval at which to cleanup expired sessions in milliseconds.
  expiration: 24 * 60 * 60 * 1000  // The maximum age (in milliseconds) of a valid session.
});

Expiration interval cleanup: stopExpiringSessions

As expirations are checked on an interval timer, connect-session-sequelize can keep your process from exiting. This can be problematic e.g. in testing when it is known that the application code will no longer be used, but the test script never terminates. If you know that the process will no longer be used, you can manually clean up the interval by calling the stopExpiringSessions method:

// assuming you have set up a typical session store, for example:
var myStore = new SequelizeStore({
  db: sequelize,
});

// you can stop expiring sessions (cancel the interval). Example using Mocha:
after("clean up resources", () => {
  myStore.stopExpiringSessions();
});

Add custom field(s) as a column

The extendDefaultFields can be used to add custom fields to the session table. These fields will be read-only as they will be inserted only when the session is first created as defaults. Make sure to return an object which contains unmodified data and expires properties, or else the module functionality will be broken:

sequelize.define("Session", {
  sid: {
    type: Sequelize.STRING,
    primaryKey: true,
  },
  userId: Sequelize.STRING,
  expires: Sequelize.DATE,
  data: Sequelize.TEXT,
});

function extendDefaultFields(defaults, session) {
  return {
    data: defaults.data,
    expires: defaults.expires,
    userId: session.userId,
  };
}

var store = new SequelizeStore({
  db: sequelize,
  table: "Session",
  extendDefaultFields: extendDefaultFields,
});

Contributing/Reporting Bugs

Try to replicate your issue using mweibel/connect-session-sequelize-example and add that as a link to your issue.

This way it's much simpler to reproduce and help you.

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].