【问题标题】:How to secure a static route with Express and Nodejs如何使用 Express 和 Nodejs 保护静态路由
【发布时间】:2013-01-30 20:11:38
【问题描述】:

我使用 Node(最新版本)+ Express,也是最新版本。我有 2 个文件夹,公共的和安全的。安全文件夹只能在登录后访问。

我自己创建了一个登录系统,现在我想知道如何保护到这个“安全文件夹”的路径。

我正在考虑为我的“安全”文件夹设置一条静态路由(就像我对公共文件夹所做的那样),然后检查用户是否已登录,但它不起作用。

这是我认为应该起作用的......

(...)
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'secured')));
(...)

function requireLogin(req, res, next) {
  if (req.session.loggedIn) {
    next(); // allow the next route to run
  } else {
    // require the user to log in
    res.redirect("/login"); 
  }
}

app.all("/secured/*", requireLogin, function(req, res, next) {
  next(); 

});

【问题讨论】:

  • 你有公共文件夹中的安全文件夹吗??
  • 对于现在(2019 年 2 月之后)阅读此问题的任何人,请注意,这可以通过中间件轻松完成。

标签: javascript node.js express


【解决方案1】:

在单独的路由上为您的私有静态指定不同的文件夹

app.use(express.static(path.join(__dirname, 'public')));
app.use('/private', express.static(path.join(__dirname, 'private')));

然后你可以在每个请求上使用你的中间件

app.all('/private/*', function(req, res, next) {
  if (req.session.loggedIn) {
    next(); // allow the next route to run
  } else {
    // require the user to log in
    res.redirect("/login"); 
  }
})

【讨论】:

  • 嗯。这两种解决方案都不起作用...如果我尝试 Pascal 的代码,我会得到一个异常,指出 req.session 未定义。如果我尝试 zeMicro 的解决方案,我可以访问受保护的文件夹,但节点会说:“无法获取 /secured/index.html”。顺便说一句,这有什么区别: app.use(express.static(path.join(__dirname, 'secured')));那:app.use('/secured',express.static(path.join(__dirname, 'secured')));
  • 似乎 app.all('/private/*') 只匹配私有文件夹,但如果用户输入 /private/index.html,则不符合此规则。 .
  • 好的,我现在开始工作了。诀窍是把 app.all(/private/*).. 在你定义到你的私人文件夹的静态路由之前。抱歉,我是 node 新手,但我今天学到了很多。谢谢!
  • app.allrouter 的一部分。正如您在上一条评论中所说,将router 放在static 中间件上方。
【解决方案2】:

在您的第一个 app.use 之前,

添加类似的东西

app.use(function(req, res, next) {
  if (req.url.match(/^\/secured\//)) {
    return requireLogin(req, res, next);
  }
  next();
})

【讨论】:

    猜你喜欢
    • 2021-10-19
    • 2020-04-26
    • 2017-10-03
    • 1970-01-01
    • 2017-09-19
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    相关资源
    最近更新 更多