Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Аутентификация и HTTP-заголовок (https://javascript.ru/forum/node-js-io-js/83444-autentifikaciya-i-http-zagolovok.html)

ksa 10.02.2022 18:04

Raadsert, есть подозрение что ты просто говнокодишь...

Как вариант сделай простенькую модель сайта.
На ней можно буде лучше понять чего ты так гоношишь.

ksa 10.02.2022 18:11

Raadsert, вот почитай доку...
https://nodejsdev.ru/doc/request-object/

Вот пример авторизации...
https://nodejsdev.ru/doc/jwt/

Raadsert 10.02.2022 22:43

Цитата:

Сообщение от ksa (Сообщение 543651)
Raadsert, вот почитай доку...
https://nodejsdev.ru/doc/request-object/

Вот пример авторизации...
https://nodejsdev.ru/doc/jwt/

Я определённо пишу говнокод, не намеренно. Скорее всего я неправильно передаю скрипт в клиент для передачи заголовка(разумеется это не скрипт для проверки авторизации, так я решил попробовать вообще передать какую то информацию в заголовках):
app.use(express.static(`${__dirname}/auth`), (req, res, next) => {
  res.status(200).sendFile(path.resolve(__dirname, 'auth', 'index.html'));
  next()
})

app.use(express.static(`${__dirname}/auth`), (req, res, next) => {
  if (req.headers.test) {
    req.user = req.headers.test
    next()
  }
  next()
})

app.get('/auth', (req, res) => {
  if (req.user) return res.status(200).send(`<h1>${req.user}</h1>`);
  else return res.status(200).send(`<h1>None</h1>`);
})


index.html загружает скрипт XML. До этого загружал файл в app.get .
Подскажите, что я делаю не так?

ksa 11.02.2022 08:32

Цитата:

Сообщение от Raadsert
что я делаю не так?

Ты лучше напиши что ты собрался этим кодом получить?

ksa 11.02.2022 08:40

Raadsert, такую вот статейку почитай...
https://medium.com/nuances-of-progra...s-80915da83c60

Raadsert 11.02.2022 16:22

Цитата:

Сообщение от ksa (Сообщение 543655)
Ты лучше напиши что ты собрался этим кодом получить?

Я собирался получить значение http-заголовка "test", который присваивается в index.html:

let request = new XMLHttpRequest();
request.open('GET', document.location, false);
request.setRequestHeader('test', 'test-info');
request.send(null);
request.getAllResponseHeaders().toLowerCase();


Вот тут, если заголовок существует, он должен передать его к req.user:

app.use(express.static(`${__dirname}/auth`), (req, res, next) => {
  if (req.headers.test) {
    req.user = req.headers.test
    next()
  }
  next()
})


После чего в app.get, если req.user существует, вместо обычной страницы index.html вывести информацию из http-заголовка "<h1>${req.user}</h1>":

app.get('/auth', (req, res) => {
  if (req.user) return res.status(200).send(`<h1>${req.user}</h1>`);
  else return res.status(200).send(`<h1>None</h1>`);
})


Дело в том что последняя часть не возвращает h1 с каким бы то ни было значением. Почему так происходит, и как вернуть результат присваиваемого http-заголовка через сервер обратно в клиент?

p.s. На сколько я понял так и работает система аутентификации, только клиент отправляет jwt-токен на сервер (вместо заголовка "test": "test-info"), он сравнивает токен с тем что хранится у него и при положительном результате отправляет клиенту некую информацию с ограниченным доступом (в случае выше это просто h1 с информацией из http-заголовка "test").

ksa 11.02.2022 18:31

Raadsert, я тебе статейку выше для чего дал?
Для начала просто почитай для чего
Цитата:

Сообщение от Raadsert
express.static

Потом нужно понять что бывает после
Цитата:

Сообщение от Raadsert
res.status(200).sendFile(...)

Тогда может быть придет понимание почему
Цитата:

Сообщение от Raadsert
последняя часть не возвращает h1 с каким бы то ни было значением

;)

Т.е. просто писать аглицкие слова в произвольном порядке - не значит программировать.

Raadsert 11.02.2022 22:02

Цитата:

Сообщение от ksa (Сообщение 543666)
Raadsert, я тебе статейку выше для чего дал?
Для начала просто почитай для чего


Потом нужно понять что бывает после


Тогда может быть придет понимание почему

;)

Т.е. просто писать аглицкие слова в произвольном порядке - не значит программировать.

express.static
используется совместно с "use" для указания директории статичных файлов, я знаю.

res.status(200).sendFile(...)
"sendFile" используется для отправки файлов в клиент, иначе как мне доставить скрипт на сторону клиента?! Дело в том что я неправильно указал статут ответа? Я всё прочитал, но всё равно не могу понять. Единственное что мне приходит в голову это то что ответ с сервера я должен обрабатывать скриптом на стороне клиента и все передаваемые сервером данные размещать при помощи скрипта.

ksa 12.02.2022 09:48

Что-то туго идет... :(

Как только ты объявил некую директорию через express.static, файлы из нее будет отправлять сам экспресс...

Как только что-то отправили клиенту - вся твоя дальнейшая "обработка" теряет всякий смысл.

Если ты хочешь что-то взять из заголовка и запихать его куда-то - это нужно делать после основных обработчиков/парсеров экспресс.

Вот тебе еще ссылочка на доку про сам экспресс
https://expressjs.com/ru/guide/routing.html

Raadsert 12.02.2022 19:48

Цитата:

Сообщение от ksa (Сообщение 543670)
Что-то туго идет... :(

Как только ты объявил некую директорию через express.static, файлы из нее будет отправлять сам экспресс...

Как только что-то отправили клиенту - вся твоя дальнейшая "обработка" теряет всякий смысл.

Если ты хочешь что-то взять из заголовка и запихать его куда-то - это нужно делать после основных обработчиков/парсеров экспресс.

Вот тебе еще ссылочка на доку про сам экспресс
https://expressjs.com/ru/guide/routing.html

Я понял... express.static просто даёт возможность переходить к файлам по ссылке без необходимости отправлять каждый через sendFile. А после самой отправки send или sendFile я уже не смогу отправить новую информацию, правильно? Но как тогда отправить на ту же страницу результат с новоиспеченным заголовком "test"?


Часовой пояс GMT +3, время: 07:39.