gpt4 book ai didi

node.js - 绕过路由处理中的身份验证

转载 作者:太空宇宙 更新时间:2023-11-03 21:53:23 25 4
gpt4 key购买 nike

我已经设置了一个带有注册主页和一些需要登录的内部页面的应用程序。我使用 Node 和 Express.js 来设置服务器并控制路由和身份验证工作正常:如果我尝试访问 localhost:port/clientPage,如果我之前登录过,我会得到所需的页面,否则会出现错误消息。

问题是,如果我尝试访问 localhost:port/clientPage.html 即使我没有事件 session ,我也会得到 clientPage。我怎样才能确保在这种情况下也能实现先前描述的相同的所需行为?我将 GET 路由的代码附加到 clientPage:

router.get('/clientPage', function (req, res, next) {
User.findById(req.session.userId)
.exec(function (error, user) {
if (error) {
return next(error);
} else {
if (user === null) {
var err = new Error('Not authorized! Go back!');
err.status = 400;
return next(err);
} else {
return res.sendFile(path.join(__dirname + '/../views/clientPage.html'));
}
}
});
});

最佳答案

因为问题是由于将 .html 添加到路由末尾而导致的,从而以某种方式绕过了身份验证路由。我认为你很有可能有

express.static(path.join(__dirname, "views") 位于公开提供文件夹服务的应用程序开头。

为什么它会覆盖您的路线?

Express 通过 app.use(...) 顺序运行中间件。语句 app.use(express.static...) 放置在 app.use(//your router) 之前,并且响应已提前解析给客户端。

利用这些知识,您可以通过在路由之前放置身份验证中间件来轻松限制其他路由,而不是在每个特定路由中嵌入数据库调用。

app.use(require("./middleware/auth"));
app.use("/homepage", require("./routes/homepage"));
app.use("/clientPage", require("./routes/clientPage"));

关于node.js - 绕过路由处理中的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47513553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com