首页 > 解决方案 > 路由控制器框架中的 passport.authenticate()

问题描述

我是 JavaScript/TypeScript 开发的新手,我目前正在扩展一个具有单点登录登录的快速应用程序。express 应用程序使用路由控制器框架来处理请求,并且应该使用 passport-saml 进行身份验证。我已经设法使用标准快速路由进行身份验证:

export class SsoRoutes {
    public router: Router;

    constructor() {
        this.router = Router();
    }


    this.router.get('/login-sso', passport.authenticate('saml'));

    this.router.post('/login-sso/consume', passport.authenticate('saml', {
        failureRedirect: '/',
        failureFlash: true,
        session: false
    }), function (req, res) {
        // handle callback

    });
}

但我不知道如何passport.authenticate(...)在路由控制器框架中使用该方法。谁可以给我解释一下这个?

标签: typescriptexpresspassport.js

解决方案


我会选择的解决方案是创建您自己的中间件来处理passport.authenticate()(查看如何在此处进行操作)。然后你可以使用你自己的中间件和@UseBefore()装饰器。

@Get("/login-sso")
@UseBefore(yourFirstMiddleware)
loginSso() {
    // ... something you want to do after passport.authenticate()
}

第二个端点也类似:

@Post("/login-sso/consume")
@UseBefore(yourSecondMiddleware)
loginSso() {
    // ... some other action you want to do after
}

对于其他解决方案,请检查您正在使用的框架的文档


推荐阅读