表达虚拟主机动态子域
express vhost dynamic subdomains
我正在尝试创建带有身份验证检查的动态子域。子域按预期工作,但自从我添加了身份验证后,它就被忽略了,至少大部分时间是这样。
isAuthenticated 总是 returns false,所以理论上它应该总是重定向到登录。但事实并非如此。
此外,日志的打印(在我看来)非常随机。
有人可以帮我解决这个问题吗?
subdomains.forEach(subdomain => {
const subDir = `${subdomainDir}/${subdomain}/`;
let subExpress = express();
subExpress.use(express.static(__dirname + subDir));
subExpress.get('*', async (req, res) => {
let isAuthenticated = false;
try {
isAuthenticated = await login.isAuthenticated(req.get('authorization'))
} catch (error) {
console.log(error);
}
console.log("subdomain", subdomain)
console.log("isAuthenticated", isAuthenticated, "subdomain === login", subdomain === "login");
if (isAuthenticated || subdomain === "login") {
res.sendFile(`/${subDir}index.html`, {
root: '.'
});
} else {
res.redirect(301, `https://login.${domain}/`);
}
});
app.use(vhost(`${subdomain}.${domain}`, subExpress));
});
let unusedSub = express();
unusedSub.get('*', (req, res) => {
console.log("unusedSub");
res.redirect(`https://dashboard.${domain}/`);
});
app.use(vhost(`*.${domain}`, unusedSub));
app.listen(port, () => console.log(`Listening on port ${port}.`));
我已经弄明白了。基本上 "use" 的顺序是错误的。
静态部分必须在身份验证检查之后,您必须调用 "next"。
也许这会对某人有所帮助。
subdomains.forEach(subdomain => {
const subDir = `${subdomainDir}/${subdomain}/`;
let subExpress = express();
subExpress.use(async (req, res, next) => {
let isAuthenticated = false;
try {
isAuthenticated = await login.isAuthenticated(req.get('authorization'))
} catch (error) {
console.log(error);
}
if (isAuthenticated || subdomain === "login") {
next();
} else {
res.redirect(301, `https://login.${domain}/`);
}
});
subExpress.use(express.static(__dirname + subDir));
app.use(vhost(`${subdomain}.${domain}`, subExpress));
});
我正在尝试创建带有身份验证检查的动态子域。子域按预期工作,但自从我添加了身份验证后,它就被忽略了,至少大部分时间是这样。 isAuthenticated 总是 returns false,所以理论上它应该总是重定向到登录。但事实并非如此。 此外,日志的打印(在我看来)非常随机。
有人可以帮我解决这个问题吗?
subdomains.forEach(subdomain => {
const subDir = `${subdomainDir}/${subdomain}/`;
let subExpress = express();
subExpress.use(express.static(__dirname + subDir));
subExpress.get('*', async (req, res) => {
let isAuthenticated = false;
try {
isAuthenticated = await login.isAuthenticated(req.get('authorization'))
} catch (error) {
console.log(error);
}
console.log("subdomain", subdomain)
console.log("isAuthenticated", isAuthenticated, "subdomain === login", subdomain === "login");
if (isAuthenticated || subdomain === "login") {
res.sendFile(`/${subDir}index.html`, {
root: '.'
});
} else {
res.redirect(301, `https://login.${domain}/`);
}
});
app.use(vhost(`${subdomain}.${domain}`, subExpress));
});
let unusedSub = express();
unusedSub.get('*', (req, res) => {
console.log("unusedSub");
res.redirect(`https://dashboard.${domain}/`);
});
app.use(vhost(`*.${domain}`, unusedSub));
app.listen(port, () => console.log(`Listening on port ${port}.`));
我已经弄明白了。基本上 "use" 的顺序是错误的。 静态部分必须在身份验证检查之后,您必须调用 "next"。 也许这会对某人有所帮助。
subdomains.forEach(subdomain => {
const subDir = `${subdomainDir}/${subdomain}/`;
let subExpress = express();
subExpress.use(async (req, res, next) => {
let isAuthenticated = false;
try {
isAuthenticated = await login.isAuthenticated(req.get('authorization'))
} catch (error) {
console.log(error);
}
if (isAuthenticated || subdomain === "login") {
next();
} else {
res.redirect(301, `https://login.${domain}/`);
}
});
subExpress.use(express.static(__dirname + subDir));
app.use(vhost(`${subdomain}.${domain}`, subExpress));
});