是否可以在Express中间件中添加路由?

时间:2018-08-19 08:59:45

标签: express basic-authentication

我正在构建一个小型身份验证中间件(因为我想做!),但是按照我想要的方式工作,我发现我正在动态地向应用程序添加路由,包括用户名/密码的POST回传以及GET。身份验证页面脚本和样式。

这里是:

function appAuth(auth, options) {
   let oneHourMs = (60 * 60 * 1000);
   let sessionStore = {};
   let html = `<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css">
<script src="index.js" type="module"></script>
</head>
<body>
</body>
</html>`;
    return function (request, response, next) {
        if (!request.app.authMiddlewarePOST_setup) {

            request.app.post(request.path, upload.array(), async function (req, res) {
                let data = req.body;
                console.log("data", data);
                let { username, password } = data;
                if (auth(username, password)) {
                    let now = new Date();
                    let sessionId = await makeSessionId(now, getRemoteAddr(req));
                    sessionStore[sessionId] = {
                        lastTouch: now,
                        id: sessionId
                    };
                    res.cookie("sessionid", sessionId);
                    res.redirect(302, req,path);
                }
                else {
                    res.status(401).send(html);
                }
            });

            request.app.authMiddlewarePOST_setup = true;
        }

        // Do authenticated session detection
        let sessionId = request.cookies.sessionid;
        if (sessionId === undefined) {
            response.status(401).send(html);
            return;
        }

        let sessionObject = sessionStore[sessionId];
        if (sessionObject === undefined
            || isExpired(sessionObject.lastTouch, oneHourMs)) {
            response.status(401).send(html);
            return;
        }

        // Otherwise it's all ok.
        next();
    };
}

我想知道:

  • 可以添加这样的路线吗?
  • 添加带有混淆路径的路线是否更好?例如:
 app.post("/" + middlewareId + "/" + randomnumber, ...)
  • 如果我这样做,我想也应该处理这条路线?
  • 有什么替代方法?

git repo已结束here-我不想用更多多余的代码弄乱帖子。

0 个答案:

没有答案