Служба Node Express обслуживает сборку / даже без правильных заголовков - PullRequest
0 голосов
/ 21 сентября 2019

Итак, я начал с создания create-реагирования на приложение и создал приложение реакции на моей машине.Я смог запустить его на localhost и посмотреть веб-страницу.Затем я запустил npm run build и позволил ему создать каталог ./build.

Затем я создал файл с именем server.js со следующим содержимым:

const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');

const auth_key = require('./correct_auth.json').auth;

const app = express();
app.disable('x-powered-by');
app.use(express.static(path.join(__dirname, 'build')));

app.get(
    '*',
    (req, res) => {
        const headers = req.headers;
        if (headers[`auth-token`] && headers[`auth-token`] === auth_key) {
            console.log(`auth-token: ${headers[`auth-token`]}`);
            res.sendFile(path.join(__dirname, `build`, `index.html`));
        } else {
            res.sendStatus(404);
        }
    }
);

app.listen(
    process.env.PORT || 5000,
    () => {
        console.log(`Frontend start on localhost:5000.`);
    }
);

Моя цель состоит в том, чтобыобслуживать веб-страницу только в том случае, если у человека правильный заголовок авторизационного токена.Однако, посещая сайт без правильного заголовка или даже без указанного заголовка, домашняя страница все еще обслуживается.

Я должен отметить, что у меня это работает на сервере Ubuntu из DigitalOcean и передается на localhost:5000 с использованием Nginx,То есть, я могу посетить api.XXXXX.com, чтобы посетить сайт, и не имеет значения, какие у меня есть заголовки, я всегда обслуживаю сайт.

Моя структура каталогов выглядит следующим образом:

build
correct_auth.json
node_modules
package.json
public
server.js
src

Ответы [ 2 ]

1 голос
/ 21 сентября 2019

Ваш маршрут:

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

Перед проверкой заголовков, чтобы они обслуживали файлы без проверки заголовков.

Я бы предложил создать одно промежуточное ПО, которое вы ставите первым, проверяющееЗаголовки и, если их там нет, возвращает соответствующий статус ошибки.

Например, поместите это сначала:

app.use((req, res, next) => {
    const headers = req.headers;
    if (headers[`auth-token`] && headers[`auth-token`] === auth_key) {
        console.log(`auth-token: ${headers[`auth-token`]}`);
        // continue on to other routes
        next();
    } else {
        // 401 status is for not-authorized
        res.sendStatus(401);
    }
});
0 голосов
/ 21 сентября 2019

Код ниже работает правильно:

const express = require('express');
const bodyParser = require('body-parser');
const path = require('path');

const auth_key = require('./correct_auth.json').auth;

const app = express();
app.disable('x-powered-by');
app.use(express.static(path.join(__dirname, 'build')));

app.get(
    '*',
    (req, res) => {
        const headers = req.headers;
        if (headers[`auth-token`] && headers[`auth-token`] === auth_key) {
            console.log(`auth-token: ${headers[`auth-token`]}`);
            res.sendFile(path.join(__dirname, `build`, `index.html`));
        } else {
            res.status(404).send("Authentication failed");
        }
    }
);

app.listen(
    process.env.PORT || 5000,
    () => {
        console.log(`Frontend start on localhost:5000.`);
    }
);

Я думаю, вы не настроили nginx должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...