是否可以动态使用路线部分来呼叫通行证策略?

问题描述 投票:0回答:1

目前,我为更多的宣誓提供者提供了以下代码:

// 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");
});

是否有一种方法可以将其统一为抽象路由?即像

// 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");
    }
);
node.js express passport.js express-router
1个回答
1
投票

具有在护照之前进行身份验证的中间件功能

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");
});

我认为应该起作用

© www.soinside.com 2019 - 2024. All rights reserved.