UNPKG

access-manager

Version:

A one-stop solution for implementing authenticated and anonymous continuous sessions with user handling and whitelisted acl.

42 lines (39 loc) 1.21 kB
module.exports = class Session{ constructor(settings){ this.SessionModel = settings.model; this.UserModel = settings.userModel; return async(...args) => await this.session(...args); } async session(req, res, next){ let mySession; if(!req.cookies.session){ // set a cookie for a session if it doesn't exist mySession = new this.SessionModel(); res.cookie('session', mySession._id, { path: '/', httpOnly: true }); // save our new cookie to our new session mySession.save(); req.session = mySession; } else { // Retrieve a stored session from our cookie session id mySession = await this.SessionModel.findOne({_id:req.cookies.session}).populate('user').exec(); if(mySession){ req.session = mySession; // is there a user saved on the session and are they logged in? if(req.session.user && req.session.loggedIn){ req.user = req.session.user; } }else{ delete(req.cookies.session); return await this.session(req, res, next); } } if(!req.user){ req.user = {'roles':['anonymous']}; // anonymous user } next(); } }