首页 > 解决方案 > 如何为每个端点和 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 /:usernamePOST /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. 谢谢你。

标签: javascriptnode.jsexpresspassport.js

解决方案


这与教程中的相同。为策略设置一些标签,然后参考它。

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


推荐阅读