如何避免在 express.js auth 中间件中捕获 HTTP OPTIONS 请求

Posted

技术标签:

【中文标题】如何避免在 express.js auth 中间件中捕获 HTTP OPTIONS 请求【英文标题】:How to avoid catching the HTTP OPTIONS request in the express.js auth middleware 【发布时间】:2018-10-25 10:29:52 【问题描述】:

好的,我有一个内置在 express.js 中的后端 API,它响应 AngularJS 中内置的 SPA。我正在使用令牌身份验证来验证客户端获取某些资源的访问权限。

我检查来自前端的传入请求是否具有包含不记名令牌的授权标头的方式是在我自己在 express.js 中制作的身份验证中间件中。

问题是 AngularJS 在实际获取请求之前发送了一个预检 OPTIONS reuqest,而 OPTIONS 是中间件捕获的第一件事,导致它拒绝请求,因为它没有承载令牌并且它停止执行。

问题是如何避免在我的身份验证中间件中捕获这个烦人的 OPTIONS 请求,而只捕获包含不记名令牌授权的实际获取请求。

这是从我的 angularJS 应用程序发送的 http 请求的代码

return $http(
            
                method: 'GET',
                url:  API_URL,
                headers: 
                    'Authorization': 'Bearer ' + 'faketoken'
                
            
        )

【问题讨论】:

请求方法已知。如果是 OPTIONS,则跳过身份验证例程。 谢谢!这工作得很好,但我想知道这个 OPTIONS 请求是否有必要首先发送! 选项请求是必要的。在跨源请求的情况下,预检请求会在主请求之前自动发送,以确定服务器是否允许来自给定源的请求。对选项请求的响应必须包含与访问控制相关的标头。如果没有选项请求,或者没有响应,主请求将失败。 ahaa 这很有意义!谢谢 【参考方案1】:

这些数据包会发送到 L3 IP 地址吗?还是 L2 协议?

【讨论】:

我不确定你是否正确理解了我的问题

以上是关于如何避免在 express.js auth 中间件中捕获 HTTP OPTIONS 请求的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Node.js / Express.js 中将中间件放在它自己的文件中

Express JS 中的中间件是啥

如何在 Express.js 中强制 SSL / https

如何将参数传递给 Express JS 中的中间件函数?

如何使用 express.js 在 Ajax 调用中实现 CSRF 保护(寻找完整示例)?

express.js 中的中间件功能范围