首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用passport保护express.js端点

使用passport保护express.js端点
EN

Stack Overflow用户
提问于 2018-03-18 21:34:20
回答 2查看 934关注 0票数 0

我想要保护我的express应用程序中的一些端点,如果我的应用程序变成一个大的app...now,我想创建一些简单的东西来管理我正在做的事情是这样的:

代码语言:javascript
运行
复制
setProtected(router) {
    const self = this;
    router.use(this.auth);
    ...
}


setPublic(router) {
    const self = this;
    ...
}


getRouter() {
    const router = express.Router();
    this.setPublic(router);
    this.setProtected(router);
    return router;
}

通过以下方式:

代码语言:javascript
运行
复制
  auth(req, res, next) {
    if(req.isAuthenticated()) {
      console.log('req.isAuthenticated()', req.isAuthenticated());
      return next();
    }
    return res.send(401);
  }

这种情况下的问题是很难维护,并且不能很好地工作,例如,如果我的publicRoute中有/:id,例如,当我没有登录时,在受保护的路由中有/ my -items,并且我试图访问/ my -items,我得到的代码是/:id。

另一个想法是用我的所有urls列表创建一个json,这些urls具有相同的信息,如受保护/不受保护和最终角色,然后使用以下内容更改auth:

代码语言:javascript
运行
复制
import urls from './urls';
auth(req, res, next) {
    if (urls[req.url] == 'public') {
        return next()
    } 
    else if (urls[req.url] == 'protected' && req.isAuthenticated()) {
        return next();
    }
    return res.send(401);
}

对你来说最好的方法是什么?

EN

回答 2

Stack Overflow用户

发布于 2018-03-18 22:07:38

You can chain middlewares:例如。

代码语言:javascript
运行
复制
const authenticate = (req, res, next) {
.. some auth logic
next();
}

app.use('/', main...
app.use('/profile', authenticate, otherMiddleware, 
app.use('/admin', authenticate, isAdmin, otherMiddleware... 
票数 0
EN

Stack Overflow用户

发布于 2020-10-29 19:57:37

在您的主文件(server.js)中,导入路由并使用其中的中间件:)

server.js

代码语言:javascript
运行
复制
const express = require('express')
const cors = require('cors')
const app = express()

// import admin routes
const adminRoute = require('./app/routes/admin.route.js')

// Add middleware for parsing URL encoded bodies (which are usually sent by browser)
app.use(cors())
// Add middleware for parsing JSON and urlencoded data and populating `req.body`
app.use(express.urlencoded({ extended: false }))
app.use(express.json())


// homepage route
app.get("/", (req, res) => {
  res.json({ message: "Hello World" })
})

// restricted by middleware "isAdmin"
app.use('/api/v1', isAdmin, adminRoute)

app.listen(8008).on('listening', () => {
  console.log('Server is running on 8008')
})

admin.route.js

代码语言:javascript
运行
复制
const express = require('express')
const admin = require('../controllers/admin.controller.js')

const router = express.Router()

// get all admin users
router.get('/users', (req, res, next)  => {
  admin.getAdminUsers(req, res, next)
})

module.exports = router
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49348465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档