【问题标题】:PassportJS - How to make separate passport.sessionPassportJS - 如何制作单独的passport.session
【发布时间】:2014-11-11 23:10:16
【问题描述】:

我的问题与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。

【问题讨论】:

标签: cookies express passport.js


【解决方案1】:

我通过

找到了护照 0.4.0 的临时解决方案

passport._key = passport._sm._key = 'customPassportSessionKey'

【讨论】:

    【解决方案2】:

    您可以通过从路由器而不是从应用程序来解决它。我通过开发类似 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 实例之间使用不同的护照、会话、策略和序列化程序.

    希望它对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多