express-jwt 不尊重未受保护的路径

2024-03-24

有关express-jwt模块的信息可以在这里找到:

  • https://github.com/auth0/express-jwt https://github.com/auth0/express-jwt
  • https://www.npmjs.com/package/express-jwt https://www.npmjs.com/package/express-jwt

In my main.js服务器文件,我有以下内容:

import ExpressJwt from 'express-jwt';
// import other crap...

let token = ExpressJwt({
    secret: 'whatever',
    audience: 'whatever',
    issuer: 'whatever'
});

app.all('/apiv1', token.unless({ path: ['apiv1/user/create', '/apiv1/auth/login']}));

app.use('/apiv1/user', user);
app.use('/apiv1/auth', auth);

Where user and auth是处理我的路线的中间件。我想要做什么是显而易见的;拒绝所有未经身份验证的用户访问 API,除非他们尝试通过以下方式创建新用户apiv1/user/create和/或通过以下方式登录apiv1/auth/login.

然而,每当我尝试向上述不受保护的路径发出请求时,我都会收到错误:

UnauthorizedError:未找到授权令牌

它仍然保护我指定不受保护的路由!我也尝试过:

app.use('/apiv1/user', token.unless({ path: ['/apiv1/user/create'] }), user);
app.use('/apiv1/auth', token.unless({ path: ['/apiv1/auth/login'] }), auth);

但这没有用。我还尝试使用正则表达式作为 except 路径,但这也不起作用。

我到达app.all('/apiv1', token...) via 这个答案 https://stackoverflow.com/questions/28997519/express-jwt-handling-specific-secret-passphrase-by-routes,但该解决方案没有给我带来所需的功能。


而不是使用all:

app.all('/apiv1', token.unless({ path: ['apiv1/user/create', '/apiv1/auth/login']}));

尝试使用use并在路径路由中添加斜杠/在开始时:

app.use('/apiv1', token.unless({ path: ['/apiv1/user/create', '/apiv1/auth/login']}));

这是一个正在运行的示例:

app.js:

var express = require('express');
var app = express();

var expressJwt = require('express-jwt');
var jwt = require('jsonwebtoken');
var secret = 'secret';

app.use('/api', expressJwt({secret: secret}).unless({path: ['/api/token']}));

app.get('/api/token', function(req, res) {
  var token = jwt.sign({foo: 'bar'}, secret);
  res.send({token: token});
});

app.get('/api/protected', function(req, res) {
  res.send('hello from /api/protected route.');
});

app.use(function(err, req, res, next) {
  res.status(err.status || 500).send(err);
});

app.listen(4040, function() {
  console.log('server up and running at 4040 port');
});

module.exports = app;

test.js:

var request = require('supertest');
var app = require('./app.js');

describe('Test API', function() {
  var token = '';

  before(function(done) {
    request(app)
      .get('/api/token')
      .end(function(err, response) {
        if (err) { return done(err); }
        var result = JSON.parse(response.text);
        token = result.token;
        done();
      });
  });

  it('should not be able to consume /api/protected since no token was sent', function(done) {
    request(app)
      .get('/api/protected')
      .expect(401, done);
  });

  it('should be able to consume /api/protected since token was sent', function(done) {
    request(app)
      .get('/api/protected')
      .set('Authorization', 'Bearer ' + token)
      .expect(200, done);
  });
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

express-jwt 不尊重未受保护的路径 的相关文章

随机推荐

  • hh_client 报告包错误

    我正在按照中的说明进行操作入门 https docs hhvm com hack getting started starting a real project在 Hacklang 官方网站上 正如它所说 我运行 touch hhconfi
  • 在包中包含一个“哈希表”

    我正在整理一个我已经工作了近一年的包 我有一个音节查找函数所需的哈希表 哈希表实际上只是一个环境 我想我不是计算机高手 它是一个查找表 您可以在下面看到我创建它的函数 我有一个数据集DICTIONARY 约 20 000 个字 将在加载包时
  • 在JAVA中从字符串(从url类型更改)中删除尾部斜杠

    我想从 Java 中的字符串中删除尾部斜杠 我想检查字符串是否以 url 结尾 如果是 我想删除它 这是我所拥有的 String s http almaden ibm com s s replaceAll 和这个 String s http
  • 使用 jQuery 创建新的 html5 视频对象

    如何使用 jQuery 创建视频元素 并将其属性 例如 control 添加到 true
  • Python 和 MySQL:有 MySQLdb 的替代品吗?

    是否有一个纯粹用 Python 编写的模块允许脚本与 MySQL 数据库通信 我已经尝试过 MySQLdb 但没有成功 它需要太多 GCC zlib 和 openssl 我无法使用这些工具 即使我这样做了 我也不想浪费时间让他们一起工作 我
  • 使用Camel的spring-rabbitmq组件时如何自动声明交换?

    我正在尝试从 Camel 3 x 迁移到 Camel 4 x 版本 因此我需要从rabbitmq替换组件spring rabbitmq With rabbitmq我正在使用的组件declare https camel apache org
  • 如何自动滚动到网格视图的末尾?

    当我将项目添加到网格视图的末尾时 我希望用户看到已添加的内容 这是我的意思的一个例子 用户通过按 图标添加项目 问题是在第 14 项之后没有任何反馈表明已添加任何项目 当最后一项添加到列表中时 如何自动滚动到最后一项 奖励点 当第 n 个项
  • 允许使用 docker-compose 在两个 docker 桥接网络之间进行通信

    我正在使用 docker compose 创建相当复杂的 docker 容器基础设施 这些容器在 4 个不同的网络中运行 类似于我模仿的生产环境 Docker Compose 为我创建了这四个网络 并且一切正常 因为容器不会尝试与不同网络内
  • 数据切换和数据目标在引导程序中不起作用

    我正在使用 bootstrap 开发导航栏 该导航栏上有两个按钮 一个用于登录 另一个用于注册 我希望当用户单击 登录 时 会弹出一个模式弹出窗口 并且当单击 注册 时 用户将被重定向到另一个页面 下面是我的代码 但在我看来它不起作用 我尝
  • 保护 REST API 和 Slim 框架的安全

    我对 REST API 相当陌生 我意识到已经发布了很多问题 然而 仔细阅读这些实际上让我对如何处理这个问题更加困惑 我使用创建了一个 REST API纤薄的框架 http www slimframework com 我只是用它来传输数据
  • Rails 5.x:如何在运行时添加路由而不覆盖原始路由表?

    假设我有一个控制器操作 应该会导致将新路由添加到路由表中 def make route vanity url params vanity url vanity redirect params vanity redirect return r
  • odbc 驱动程序不支持请求的属性

    当我们在最后一行运行程序时 odbc 驱动程序不支持请求的属性 错误出现 任何人都可以给我一个想法 Dim conn As New ADODB Connection Dim rsRec As ADODB Recordset Dim cmd
  • 如何在张量流中使用非常大(>2M)的词嵌入?

    我正在运行一个具有非常大的词嵌入 gt 2M 词 的模型 当我使用 tf embedding lookup 时 它需要一个很大的矩阵 当我运行时 我随后出现了 GPU 内存错误 如果我减小嵌入的大小 一切都会正常 有没有办法处理更大的嵌入
  • 如何在 Matlab 启动时设置一些自定义变量

    我想设置一些初始变量 例如format compact和当前目录 在 Matlab 每次启动时自动执行 我怎样才能做到这一点 创建一个startup m 脚本文件 其中包含用于设置所需状态的命令 接下来 从 MATLAB 内部运行命令 gt
  • 在 BigQuery python api 中设置聚类列

    我正在尝试在 BigQuery 中创建集群表 当我在 UI 中测试它时 它工作得很好 CREATE OR REPLACE TABLE project id xyz temp clustering PARTITION BY date CLUS
  • 使用具有应用程序权限的 Microsoft Graph API 时,租户没有 SPO 许可证

    当我们尝试访问 Microsoft Graph v1 0 API 中的 Sharepoint 终结点时 我们收到 400 错误 并显示消息 租户没有 SPO 许可证 我们已经注册了 Azure AD 应用程序并为相关端点分配了应用程序权限
  • 为什么函数返回 nil FireBase Swift [重复]

    这个问题在这里已经有答案了 为什么函数会返回 nil 我尝试添加 DispathQue 但我不明白它应该如何正确 请帮忙 func storagePutData uid String image UIImage compretition e
  • Spring 中的 Hibernate 事务管理器配置

    在我的项目中 我使用 Hibernate 进行编程事务划分 每次在我的服务方法中我都会写类似的东西 Session session HibernateUtil getSessionFactory openSession session be
  • 这样做的目的是什么(MyJobject as ILocalObject).GetObjectID

    在delphi Tokyo源代码中 我看到这两种不同的方式来检索 服务经理 var FLocationManager JLocationManager FLocationManager TJLocationManager Wrap TAnd
  • express-jwt 不尊重未受保护的路径

    有关express jwt模块的信息可以在这里找到 https github com auth0 express jwt https github com auth0 express jwt https www npmjs com pack