5

How to allow one active session per user using node-passport-restify? ie; not allowing a user to be active in multiple session using other tabs or browsers at a time.

Here is the code on which application runs.

const
restify = require('restify'),
restifyPlugins = require('restify').plugins,
passport = require('passport'),
BearerStrategy = require('passport-azure-ad').BearerStrategy,
config = require('./config'),
authenticatedUserTokens = [],
serverPort = process.env.PORT || config.serverPort;

const authenticationStrategy = new BearerStrategy(config.credentials, (token, done) => {

let currentUser = null;
let userToken = authenticatedUserTokens.find((user) => {
    currentUser = user;
    user.sub === token.sub;
});

if (!userToken) {
    authenticatedUserTokens.push(token);
}

return done(null, currentUser, token);
});

passport.use(authenticationStrategy);

const server = restify.createServer({
name: 'My App'
});


server.use(restifyPlugins.acceptParser(server.acceptable));
server.use(restifyPlugins.queryParser());
server.use(restifyPlugins.fullResponse());
server.use(restifyPlugins.bodyParser({
  maxBodySize: 0,
  multiples: true
 }));

server.use(restifyPlugins.authorizationParser());
server.use(passport.initialize());
server.use(passport.session());

server.get('/api/test', passport.authenticate('oauth-bearer', {
session: false
}), (req, res, next) => {
   res.send({"message":"Success"});
   return next();
 });

 server.listen(serverPort)

config.js

module.exports.serverPort = serverPort;
module.exports.credentials = {
   identityMetadata: config.creds.identityMetadata,
   clientID: config.creds.clientID
 };

I tried with

var passportOneSessionPerUser=require('passport-one-session-per-user')

passport.use(new passportOneSessionPerUser())

but, it was not giving expected result.

am831
  • 75
  • 4
  • Possible Duplicate https://stackoverflow.com/questions/29144827/express-js-passport-js-how-to-restrict-multiple-login-by-the-same-user – Robus Jul 14 '20 at 06:17
  • I tried using passport-one-session-per-user but it was not working for me. `var passportOneSessionPerUser=require('passport-one-session-per-user') passport.use(new passportOneSessionPerUser())` – am831 Jul 14 '20 at 06:48

0 Answers0