javascript - 如何为每个端点和 REST 方法设置不同的 Passport JS Bearer 策略?
问题描述
我正在使用BearerStrategy
并且我试图在同一个路由器中为每个端点或方法设置不同的策略。
我查看了文档,除了创建一个新路由器之外,我还没有看到任何关于这种情况的参考。
这就是我得到的:
const router = express.Router()
passport.use(new BearerStrategy(
{ passReqToCallback: true },
async function (req, token, done) {
if (token) {
// business logic
}
}));
router.post("/",
passport.authenticate('bearer', { session: false, passReqToCallback: true, failWithError: true },
function (req, res, next) { // handle success
},
function (err, req, res, next) { // handle failure
});
router.get("/",
passport.authenticate('bearer', { session: false, passReqToCallback: true, failWithError: true },
function (req, res, next) { // handle success
},
function (err, req, res, next) { // handle failure
});
router.get("/:username",
passport.authenticate('bearer', { session: false, passReqToCallback: true, failWithError: true },
function (req, res, next) { // handle success
},
function (err, req, res, next) { // handle failure
});
我寻求如何为每个端点实现不同的业务逻辑。一个用于GET /
,另一个用于 GET /:username
和POST /
api
在本教程中,我看到了这个:
passport.use('local-login', new LocalStrategy({ ... })
passport.use('local-signup', new LocalStrategy({ ... })
router.post('/signup', passport.authenticate('local-signup', {
successRedirect : '/auth/profile',
failureRedirect : 'auth/signup'
}));
router.post('/login', passport.authenticate('local-login', {
successRedirect : '/auth/profile',
failureRedirect : 'auth/login'
}));
但无法对BearerStrategy
. 谢谢你。
解决方案
这与教程中的相同。为策略设置一些标签,然后参考它。
passport.use('GET-strategy', new BearerStrategy(
{ passReqToCallback: true },
async function (req, token, done) {
if (token) {
// business logic
}
}));
passport.use('POST-strategy', new BearerStrategy(
{ passReqToCallback: true },
async function (req, token, done) {
if (token) {
// business logic
}
}));
接着:
router.get("/",
passport.authenticate('GET-strategy', { session: false, passReqToCallback: true, failWithError: true }),
function (req, res, next) { // handle success
},
function (err, req, res, next) { // handle failure
});
router.post("/",
passport.authenticate('POST-strategy', { session: false, passReqToCallback: true, failWithError: true }),
function (req, res, next) { // handle success
},
function (err, req, res, next) { // handle failure
});
推荐阅读
- javascript - 使用滚动导航插件滚动错误
- arrays - C 编程 - 使用并行数组输入名称、练习标记和计算练习标记的平均值并显示
- c - 我无法理解 fgetc 的核心转储原因,我该如何解决?
- php - 弹出的进程永不消亡
- javascript - Promise 链接未处理的 Promise
- javascript - 在 ASP 页面中使用带有 Jquery 的 JS 函数
- python - 创建多边形的算法(No Thiesen/Voronoi)
- coldfusion - apache 已配置,但网站仍无法加载coldfusion
- python-3.x - 内核启动请等待 macbook air m1 上的 jupyter notebook
- python - 删除每一行的 NaN 后是否可以将每一行移动到同一行的末尾