我的问题与PassportJS - Using multiple passports within Express application主题有关。 因此,只要我已经有两个单独的护照实例,我意识到它们都共享相同的cookie,在此处创建:
application.use(session({ secret: 'my secret cookie', key: 'usid' }));
我可以使用以下方法添加一个不同名称的cookie:
app.use(connect.session({ secret: 'keyboard cat', key: 'rsid' }))
但是,我不清楚如何指示每张护照使用自己的cookie。
答案 0 :(得分:0)
我通过以下途径找到了0.4.0护照的临时解决方案
passport._key = passport._sm._key = 'customPassportSessionKey'
答案 1 :(得分:0)
您可以通过从路由器而不是从应用程序生成来解决此问题。我通过开发类似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');
然后快递应用程序仅使用每个路由器。
app.use('path-client-vip', routerUsers_1)
app.use('path-client', routerUsers_2)
app.use('path-admin', routerAdmin)
我正在同一台Express应用服务器中使用2个Web应用程序(具有不同的用户,登录名和内容),每个Web应用程序针对多个路由器使用此AuthBuilderService的不同实例,并在每个AuthBuilderService实例之间使用不同的通行证,会话,策略和序列化程序
希望它会对别人有帮助。