您可以通过从路由器而不是从应用程序来解决它。我通过开发类似 AuthBuilder 的东西解决了同样的问题,它接收某些参数,每个实例都以这种方式生成一个新护照。
class AuthBuilderService {
constructor() {
this.passport = new Passport();
this.registerSerializers(); // Multiple serializers
this.registerStrategies(); // Multiple strategies
}
然后您可以通过调用 authbuilder.addRouter(...) 来注册多个具有相同护照和密钥(或仅一个)的路由器
addRouter(router, loginFileName, failureUrl, successUrl) {
router.use('/login', express.static(`${__dirname}/../views/whatever`, {
index: loginFileName,
fallthrough: true,
}));
router.use(session({
secret: 'any secret',
key: (_isRouterA()) ? 'a' : 'b',
resave: true,
saveUninitialized: true
}));
router.use(this.passport.initialize());
router.use(this.passport.session());
this._configureRouter(router, failureUrl, successUrl); // There I'm handling login, logout and some middleware.
return this;
}
来自您要保护的路由器:
routerUsers_1.get('something_1', method)
routerUsers_2.get('something_2', method2)
let authBuilder = new AuthBuilderService();
authBuilder.addRouter(routerUsers_1, 'login_users_vip.html', '/path/failure_vip/', '/path/success_vip');
authBuilder.addRouter(routerUsers_2, 'login_users.html', '/path/failure/', '/path/success');
routerAdmins.get('something', methodAdmin)
new AuthBuilderService().addRouter(routerAdmins, 'login_admins.html', '/path2/failure/', '/path2/success');
然后express app只使用每个路由器。
app.use('path-client-vip', routerUsers_1)
app.use('path-client', routerUsers_2)
app.use('path-admin', routerAdmin)
我在同一个 express 应用服务器中使用 2 个 webapp(具有不同的用户、登录名和内容),每个 webapp 使用此 AuthBuilderService 的不同实例,用于多个路由器,在每个 AuthBuilderService 实例之间使用不同的护照、会话、策略和序列化程序.
希望它对某人有所帮助。