如何在自定义中间件中使用csurf?

问题描述 投票:0回答:1

我设法使csurf应用程序作为常规中间件在其中运行。但是,我想将其添加到我的自定义身份验证中间件中,既避免在每个路由中都包含express,又避免忘记使用它。如何在自定义中间件中调用csurf

例如,说我有使用csurf的中间件来限制对登录用户的访问:

express-session

export const auth = async (req, res, next) => { const { uid } = req.session; try { const user = await User.query().findById(uid); req.session.role = user.role; next(); } catch { throw new PrivateRouteError(); } }; 可以做到这一点,但我无法实现它。这是我尝试过的:

This answer

但是,结果是export const auth = async (req, res, next) => { const csrf = csurf({ cookie: true, ignoreMethods: [] }); csrf(req, res, async () => { const { uid } = req.session; try { const user = await User.query().findById(uid); req.session.role = user.role; next(); } catch { throw new PrivateRouteError(); } }); }; 不会阻止对丢失的CSRF令牌的访问,并且csurf不会被捕获并使应用程序崩溃(如果用户未通过身份验证,则可以正常工作。)>]

是否有一种巧妙的方法将PrivateRouteError捆绑到我的中间件中,还是应该手动将其添加到所有使用csurf中间件的路由中?

我设法使csurf作为常规中间件在我的express应用中工作。但是,我想将其添加到我的自定义身份验证中间件中,以避免都在每条路由中都包含csurf ...

node.js express csrf
1个回答
0
投票

[好吧,我昨晚显然在考虑这个问题。摆脱auth调用并将next()内容放入catch块就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.