最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

针对特定路由的特殊Passport身份验证

运维笔记admin12浏览0评论

针对特定路由的特殊Passport身份验证

针对特定路由的特殊Passport身份验证

我正在使用Express.js开发RESTful API,我正在使用Passport.js进行身份验证。 以下是我如何使用护照和路线的示例:

const beerRoutes = require('./beerRoutes')     // an instance of express router
let authenticateRoute = passport.authenticate('jwt', { session: false })

router.use('/beer', authenticateRoute, beerRoutes)

在beerRoutes.js里面:

const router = require('express').Router()

router.post('/', (req, res) => {})
router.get('/', (req, res) => {})
router.patch('/', (req, res) => {})
router.delete('/', (req, res) => {})

问题是,我希望未经身份验证的客户能够创建新用户(即POST /beer/)。但是,当我们向同一端点发送请求时,我还希望为经过身份验证的客户端提供其他权限。

如何在不让未经身份验证的客户访问beerRoutes(例如PATCH /beer/)内的其他路线的情况下实现这一目标?

回答如下:

这可以通过调用Passport.js中间件的自定义中间件来解决。

const authenticationWhiteList = [
  'POST /beer'
]


function Authenticate (request, response, next) {
  let route = `${request.method} ${request.baseUrl}`

  if (_.indexOf(authenticationWhiteList, route) !== -1) {
    next()
  } else {
    passport.authenticate('jwt', { session: false })(request, response, next)
  }
}

然后将身份验证代码更改为以下代码:

const beerRoutes = require('./beerRoutes')     // an instance of express router

// let authenticateRoute = passport.authenticate('jwt', { session: false })
let authenticateRoute = Authenticate


router.use('/beer', authenticateRoute, beerRoutes)
发布评论

评论列表(0)

  1. 暂无评论