PassportJS-如何制作单独的passport.session [英] PassportJS - How to make separate passport.session

查看:116
本文介绍了PassportJS-如何制作单独的passport.session的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题与> PassportJS-在Express应用程序中使用多本护照主题。
只要我已经有两个单独的护照实例,我就意识到它们都共享同一个cookie,在这里创建:

My question is related to PassportJS - Using multiple passports within Express application topic. So as long as I already have two separate passport instances, I realized that they both share the same cookie, created here:

application.use(session({ secret: 'my secret cookie', key: 'usid' }));

我可以使用以下方法添加另一个具有不同名称的cookie:

I can add one more cookie with different name using this:

app.use(connect.session({ secret: 'keyboard cat', key: 'rsid' }))

但是,我不清楚如何指示每本护照使用自己的cookie。

However, it is not clear to me how to instruct each passport to use its own cookie.

推荐答案

您可以通过从路由器而不是从应用程序生成来解决它。我已经通过开发类似AuthBuilder的方法解决了相同的问题,该方法可以接收某些参数,每个实例都以这种方式生成新护照。

You can solve it by making from the router and not from the app. I've solved the same issue by developing something like an AuthBuilder which receives certain parameters, each instance generates a new passport that way.

class AuthBuilderService {
    constructor() {
        this.passport = new Passport();
        this.registerSerializers(); // Multiple serializers
        this.registerStrategies(); // Multiple strategies
    }

然后,您可以使用相同的护照和钥匙注册多个路由器(或仅一个),方法是调用authbuilder.addRouter(...)

Then you can register multiple routers with the same passport and key (or just one) by calling the 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;
    }

从您要保护的路由器中:

From the routers you want to protect:

    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');

然后快递应用程序仅使用每个路由器。

Then express app just use each router.

app.use('path-client-vip', routerUsers_1)
app.use('path-client', routerUsers_2)
app.use('path-admin', routerAdmin)

我正在使用2个webapp(具有不同的用户,登录名和内容)在同一台Express应用服务器中,每个Web应用程序将AuthBuilderService的不同实例用于多个路由器,并在每个AuthBuilderService实例之间使用不同的通行证,会话,策略和序列化程序。

I'm working with 2 webapps (with different users, logins and content) in the same express app server, each webapp uses different instances of this AuthBuilderService for multiple routers using different passport, sessions, strategies and serializers between each AuthBuilderService instance.

希望它会帮助别人。

这篇关于PassportJS-如何制作单独的passport.session的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆