5

如何使用 node-passport-restify 允许每个用户进行一个活动会话?IE; 不允许用户一次使用其他选项卡或浏览器在多个会话中处于活动状态。

这是应用程序运行的代码。

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)

配置.js

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

我试过了

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

护照使用(新护照OneSessionPerUser())

但是,它没有给出预期的结果。

4

0 回答 0