是否可以动态使用路由部分来调用通行证策略?

Is it possible to dynamically use a route part to call passport strategy?

目前,我有以下代码供更多的誓言提供者使用:

// facebook
router.get("/facebook", passport.authenticate("facebook", { scope: ["email"] }));
router.get("/facebook/callback", passport.authenticate("facebook"), (req, res) => {
    console.log(chalk.blue("went into facebook callback"));
    res.redirect("http://localhost:3000/profile");
});

// github
router.get("/github", passport.authenticate("github"));
router.get("/github/callback", passport.authenticate("github"), (req, res) => {
    console.log(chalk.blue("went into github callback"));
    res.redirect("http://localhost:3000/profile");
});

有没有办法将其统一为抽象路由? IE。像

// github
router.get("/:provider", passport.authenticate(:provider));
router.get("/:provider/callback", passport.authenticate(:provider), (req, res) => {
    console.log(chalk.blue("went into {:provider} callback"));
    res.redirect("http://localhost:3000/profile");
});

更新: 下面的一段代码做了我想要的。感谢@Usman Abdur Rehman。

function callbackDistributer(req, res, next) {
    console.log(req.params);
    global.provider = req.params.provider;
    next();
}

router.get(
    "/:provider/callback",
    callbackDistributer,
    (req, res, next) => {
        passport.authenticate(global.provider)(req, res, next);
    },
    (req, res) => {
        console.log(chalk.red("went into: " + global.provider));
        res.redirect("http://localhost:3000/profile");
    }
);

在 passport.authenticate 中间件

之前有一个中间件函数
function ownMiddleware(req,res,next){
    global.provider = req.params.provider
    next()
}

然后在路由处理程序中使用它作为

router.get("/:provider/callback", ownMiddleware ,passport.authenticate(global.provider), (req, res) => {
    console.log(chalk.blue("went into {:provider} callback"));
    res.redirect("http://localhost:3000/profile");
});

我认为它应该有效