我已经通过 Github Issues 向 csurf (Douglas Wilson) 的作者提出了这个问题,他建议在 stackoverflow 上创建一个新帖子。
原始问题在这里:https ://github.com/expressjs/csurf/issues/161
我的情况是:我在 express 中有一些 api(发布、放置、获取和删除)也带有路径参数。一些例子:删除 /api/users/2376213786213 POST /api/users 。(有身体)等等
我想使用 csurf,但我也想捕捉有人调用带有空路径参数的 api 并返回 404。简而言之,如果你调用 DELETE /api/users/(使用空 id 作为路径参数)我想要返回 404,否则如果您调用 DELETE /api/users/12121 我想处理 csrf 令牌,如果无效则返回 403。可能吗?如何?
我创建了一个中间件来处理 csrf,就像在官方 csurf 的示例中一样:
// error handler
app.use(function (err, req, res, next) {
if (err.code !== 'EBADCSRFTOKEN') return next(err)
// handle CSRF token errors here
res.status(403)
res.send('form tampered with')
})
在这个中间件之后,我创建了另一个来处理 404,没什么特别的。
但是,此 api DELETE /api/users/(以空 id 作为路径参数)被第一个中间件捕获并返回 403,而不是 404。
我怎样才能解决这个问题?
谢谢你。