繁体   English   中英

将 Auth0 API 保护路由与 Express 路由处理程序一起使用

[英]Use Auth0 API protected route with Express route handlers

我使用Auth0 quick start在 Express 中实现了受保护的 API 路由。 受保护的路由由 Auth0 提供的名为checkJwt的中间件 function 处理。 每当调用 GET 方法之一时,它就会运行。 如果我在server.js中管理所有路由,则此过程运行良好。

如何分离路由处理并仍然保留受保护的 API 路由?

带有受保护路由的server.js工作代码。

 import colors from 'colors' import cors from 'cors' import express from 'express' import morgan from 'morgan' import dotenv from 'dotenv' import connectDB from './db.js' import checkJwt from './middleware/auth.middleware.js' import { getStudents, getStudent } from './controllers/students.controller.js' dotenv.config() connectDB() export const app = express() app.use(cors()) app.use(express.json({ limit: '50mb' })) if (process.env.NODE_ENV === 'development') { app.use(morgan('dev')) } //handle routing internally app.get('/api/students/:id', checkJwt, getStudent) app.get('/api/students', checkJwt, getStudents) const PORT = process.env.PORT || 6000 app.listen(PORT, () => console.log( `Server running in ${process.env.NODE_ENV} mode on port ${PORT}`.yellow.bold ) )

随着代码的增长,我想脱离路由处理。 一旦我分离出路由,我就无法弄清楚将checkJwt放在哪里。

server.js所需的代码结构是:

 import colors from 'colors' import cors from 'cors' import express from 'express' import morgan from 'morgan' import dotenv from 'dotenv' import connectDB from './db.js' import studentsRouter from './routes/students.routes.js' dotenv.config() connectDB() const app = express() app.use(cors()) app.use(express.json({ limit: '50mb' })) if (process.env.NODE_ENV === 'development') { app.use(morgan('dev')) } // handle routing externally const apiRouter = express.Router() app.use('/api', apiRouter) apiRouter.use('/students', studentsRouter) const PORT = process.env.PORT || 6000 app.listen(PORT, () => console.log( `Server running in ${process.env.NODE_ENV} mode on port ${PORT}`.yellow.bold ) )

路由在students.routes.js路由处理程序中实现。

 import express from 'express' import { getStudent, getStudents } from '../controllers/students.controller.js' const router = express.Router() // where can I implement checkJwt? router.route('/').get(getStudents) router.route('/:id').get(getStudent) export default router

是否可以通过移动路由来简化代码,并且仍然保护我的路由?

您可以在路由器中使用任何这样的中间件:

const router = express.Router();

router.route('/').get([checkJwt, secondMiddleware, ...] , getStudents);

基于文档:快速路由

您可以提供多个回调函数,它们的行为类似于中间件来处理请求。 唯一的例外是这些回调可能会调用 next('route') 来绕过剩余的路由回调。 您可以使用此机制对路由施加先决条件,然后如果没有理由继续当前路由,则将控制权传递给后续路由。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM