один сеанс на пользователя с использованием Nodejs -Restify-Passport - PullRequest
5 голосов
/ 10 июля 2020

Как разрешить один активный сеанс для каждого пользователя с помощью узла-паспорта-restify? т.е. запрещение пользователю быть активным в нескольких сеансах с использованием других вкладок или браузеров одновременно.

Вот код, на котором запускается приложение.

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
 };

Я пробовал с

var PassportOneSessionPerUser = require ('паспорт-один-сеанс-на-пользователя')

паспорт. используйте (новый паспортOneSessionPerUser ())

, но это не дало ожидаемого результата.

...