Как разрешить один активный сеанс для каждого пользователя с помощью узла-паспорта-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 ())
, но это не дало ожидаемого результата.