当前位置: 首页 > 面试题库 >

在快速进入每条路线之前如何使用中间件检查授权?

龙飞文
2023-03-14
问题内容

当我输入我的Web应用程序的用户的URL时,我想检查他们的授权。但是,当我使用一个单独的中间件来检查授权时,它对于已经存在的路由是没有用的,例如:

function authChecker(req, res, next) {
    if (req.session.auth) {
        next();
    } else {
       res.redirect("/auth");
    }
}

app.use(authChecker);
app.get("/", routes.index);
app.get("/foo/bar", routes.foobar);

authChecker 是unabled检查谁进入两个URL的用户的权限。它仅适用于未指定的网址。

我看到了一种方法,可以将 authChecker 放在路由和路由处理程序之间,例如:

app.get("/", authChecker, routes.index);

但是,如何才能以一种简单的方式来实现它,而不是将authChecker放在每条路由中?


问题答案:

只要

app.use(authChecker);

在之前

app.use(app.router);

它将为每个请求被调用。但是,您将获得“太多重定向”,因为 所有ROUTES 都在调用它,包括 / auth
。因此,为了解决这个问题,我建议将函数修改为:

function authChecker(req, res, next) {
    if (req.session.auth || req.path==='/auth') {
        next();
    } else {
       res.redirect("/auth");
    }
}

这样,您也不会重定向身份验证URL。



 类似资料:
  • 问题内容: 我的Express应用上有一条路线如下: 该ID始终是数字。但是,此路线目前与其他条件匹配,例如。 我想我希望从中得到两点: 仅在ID为数字时使用此路由,并且 仅当尚未为该特定参数定义路线时(例如与冲突)。 能做到吗? 问题答案: 扩展Marius的答案,您可以提供正则表达式和参数名称:

  • 我正在创建一个API,所以我想添加一个用户系统并验证对该API的访问。 这将是验证的中间件: 虽然这是一条路线: 另一方面,这是我的主要应用程序设置(app.js): 我得到这个错误: D:\api rest\node\u modules\express\lib\router\route。js:202抛出新错误(msg)^ 错误:路由。get()需要一个回调函数,但在路由上得到了一个[object

  • 问题内容: 我在Socket.io中使用Express,但我不知道如何在Express路由中使用SocKet.io。 我最终在“ app.js”中这样做 我该如何定义到“ / cmp”的路由,并在其中传递var“ io”? 这样,在“ /routes/cmp.js”中,我可以执行以下操作: 一些线索? 问题答案: 高阶函数呢? 然后 作为另一种选择,有时我会将路线的格式设置为以下格式: 然后定义为

  • 问题内容: 我想通过将NSDate与当前日期进行比较来检查NSDate是否在之前(过去)。我该怎么做? 谢谢 问题答案: 我找到了方法。 您也有方法。 迅速3到迅速5:

  • 问题内容: 我正在将node与express和passportjs一起使用,以限制对位于私有文件夹中的文件的访问。我将代码简化为以下内容。公共静态文件夹中的所有内容都可以正常工作,但通过使用staticMiddleware定位到私有文件夹的路由将返回404错误。 我使用的以下参考似乎对其他人有用,因此我一定会丢失一些东西。这对我来说不起作用,对于私有区域中的内容仅显示404响应。 我本可以发誓我以

  • 我的应用程序不想进入我的游戏控制器。php函数。它确实在group函数中,我用vardump对其进行了测试。它会一直走下去,直到它撞上“游戏”路线,然后它就不想走这条路线。 routes.php: GameController.php: AuthenticationController。php: 目标是当我的用户登录时转到游戏页面,这是因为Laravel会话cookie已经制作完成(我检查过),我