【问题标题】:Express app.use() with 2 middleware cannot work togetherExpress app.use() 与 2 个中间件不能一起工作
【发布时间】:2020-02-12 19:40:26
【问题描述】:

我正在尝试将“Basic Auth”或“Bearer Token”应用于以“/auth”开头的所有路由

在同一个路由器文件“routes/auth.js”中,我准备了 2 种路由器类型并将它们一起导出。然后在“app.js”中,我尝试将两个中间件都应用到“app.use()”。

结果是,并非两种类型都同时工作。只有第一个位置的中间件影响所有“/auth”路由,即:-

app.use('/auth', [affecting-all-auth-routes, no-effect-on-all-auth-routes]);

这些是我尝试过的参考网站:- http://expressjs.com/zh-tw/api.html#app.use

app.use('/', [r1, r2]);

What is a better way to authenticate some of the routes on Express 4 Router?

我猜这可能是由于一些语法错误。你能给我一些想法吗?

// app.js

const express = require('express');

const authRouter = require('./routes/auth');

const app = express();

app.use('/auth', [authRouter.basic, authRouter.bearer]);

// 路由/auth.js

const express = require('express');
var routerBasic = express.Router();
var routerBearer = express.Router();

const basicAuth = require('express-basic-auth');
const jwtProtected = require('./middleware/jwToken');

routerBasic.use(basicAuth({
    users: { 'admin': '1234' }
}))
routerBearer.use(jwtProtected);

const login = require('../controllers/Auth/Basic/login');
const tokenRevoke = require('../controllers/Auth/Token/revoke-token');

routerBasic.post('/login', login);
routerBearer.post('/token/revoke', tokenRevoke);

module.exports = {
    basic: routerBasic,
    bearer: routerBearer
}

【问题讨论】:

  • 你试过这样吗(不带 []): `
  • 我试过了,但没有帮助...
  • 能不能展示一下你的中间件功能代码???

标签: express


【解决方案1】:

经过一天的研究,我终于得到了答案。

我不会在路由器级别分离身份验证类型,它应该在路由级别:-

router.post('/login', basicAuthFunctionHere, login);
router.post('/token/revoke', jwtAuthFunctionHere, tokenRevoke);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多