Socket
Book a DemoInstallSign in
Socket

shelf-jwt-sessions

Package Overview
Dependencies
Maintainers
0
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install
Package was removed
Sorry, it seems this package was removed from the registry

shelf-jwt-sessions

A simple tool for defining user session model classes in redis using shelf and jwt

latest
Source
npmnpm
Version
0.1.2
Version published
Weekly downloads
0
Maintainers
0
Weekly downloads
 
Created
Source

shelf-sessions

shelf Logo

Define user session model classes with ttl in redis using jwt and shelf.

Build Status npm version

Introduction

For when you need to store volatile user sessions, with all that useful info you need, but don't want to go through the pain of creating special cron jobs to clear them. Creating new sessions should be easy and authenticating requests should be fast, so, here you go, jwt + redis, perfect combo!

Shelf sessions uses joi for schema validation and node-jsonwebtoken lib for issuing tokens and validating them.

Example

const ShelfSessions = require('shelf-jwt-sessions')
const Crypto = require('crypto')
const Joi = require('joi')

const secret = Crypto.randomBytes(128)

let MyShelf = ShelfSessions('test', secret, {
  algorithm: 'HS256',
  subject: 'yolo',
  issuer: 'me'
})

let MyModel = MyShelf.extend({
  name: 'basic-user',
  props: {
    userAgent: Joi.string()
  }
})

MyModel.createSession({
  userId: 'me',
  scopes: ['default'],
  userAgent: 'stuff from the header'
}, (err, result) => {
  if (err) throw err
  MyModel.authenticate(result.jwt, console.log)
})

API

ShelfSessions(name, secretOrPrivateKey, [options])

Initiate a ShelfSessions instance.

  • name will be the name used to instantiate Shelf
  • secretOrPrivateKey secret/private key used to sign the JWT's as described by the node-jsonwebtoken library. It must be a string or a buffer.
  • [options] series of optional parameters used by node-jsonwebtoken and Shelf
    • [algorithm] algorithm used to sign the jwt
    • [audience] audience claim
    • [subject] subject claim
    • [issuer] issuer claim
    • [headers] additional headers as specified by node-jsonwebtoken
    • [ttl] sessions ttl in seconds. Defaults to 72 hours
    • [shelf] an already inited shelf instance (will override connection options to instantiate Shelf)
    • [host] redis host used by Shelf
    • [port] redis port used by Shelf
    • [password] redis password used by Shelf
    • [defaultProps] an optional json object whose keys should be Joi objects. This is used to extend the default session schema and be used on all the .extend() calls. The default schema will be:
    {
      jwt: Joi.string().required(),
      userId: Joi.string().required(),
      scopes: Joi.array().min(1).required()
    }
    
    You can extend the schema at will but this three keys must always exist.

.extend(model)

Generate a SessionModel schema similar to what you would do with a regular Shelf instance. The provided schema will then be used to operate on the specified models.

  • model a model similar to what you would use in Shelf.extend(model)

    • name a mandatory name for the schema.
    • [props] an optional json object whose keys should be Joi objects, used to extend the base user model according to the defaultProps.

    ** Note: ** no keys array is provided to act as Redis key, as it will always be the jwt.

SessionModel

The result of the .extend() call. This will allow to make operations based on the schemas and options previously provided.

.deleteSession(token, callback)

Delete the sessions associated with the token. The callback will be called with an error in case of failure.

  • token jwt token
  • callback a callback function

.createSession(session, callback)

Creates a session based on the given session object. The callback will be called as - callback(error, resultSession) - being that, if successful, the provided resultSession will be a Shelf Model with all the normal operations associated to it.

  • session a session json object
  • callback a callback function

.authenticate(token, callback)

Given a jwt, this method verifies it and returns the correspondent session Shelf Model stored in Redis. The callback will be called as - callback(error, resultSession)

  • token jwt token
  • callback a callback function

Contributing

We use standard js.

In order to run the tests you should have an Redis instance running locally.

License

MIT

Keywords

redis

FAQs

Package last updated on 24 Nov 2025

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