Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789

Перенаправление запроса и передача дополнительных заголовков

14.01.2019, 11:00. Показов 1563. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть код который перенаправляет запрос на ресурс, когда пользователь уже прошел успешную авторизацию и получил JWT-token.

JavaScript
1
2
3
4
/*перенаправление запроса на другую страницу*/
function redirectUri(redirectUri){
    window.location.href = redirectUri;
}
Маркер сохраняю с уникальным идентификатором (уникальная строка) и сохраняю в localeStorage. Таких маркеров там много.

Я на стороне сервера использую веб-сервисы, загрузка данных на страницу происходит с помощью ajax-запросов, а вот перенаправление на страницы происходит с помощью кода, который я указал выше.
Я думаю передавать id-token вместе с перенаправлением, чтобы можно было передавать между страницами успешную авторизацию пользователя (фильтры безопасности настроены на проверку JWT-token).

Используя id-token, можно запрашивать из хранилища нужный token, чтобы можно было запрашивать ресурс.
Затем в ajax-запросе я формирую заголовок вот такого типа....

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/*формирование специального заголовка*/
function makeHeaderWithJwt(jwt){
 
    return "Authorization", 'Bearer '+ jwt;
}
 
 
 
 
/* Запрос к странице, которая требует авторизацию
* beforeSend - прежде чем отправить ajax-запрос,
* формируем специальный заголовок и только тогда отправляем
* запрос*/
function redirectUrlOld(uri, token, selector){
 
    $.ajax({
        type: "POST",
        url: uri,
        contentType: 'application/json',
        beforeSend : function(request) {
            request.setRequestHeader('Authorization', makeHeaderWithJwt(token));
        },
        success: function () {
        console.log("Успешно отправлен ответ!")
        },
        error: function (error) {
            console.log("Ошибка перенаправления!")
        //    messageErr(error,selector);
        }
    });
}
Как я могу организовать и передачу id-маркера.
Миниатюры
Перенаправление запроса и передача дополнительных заголовков  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.01.2019, 11:00
Ответы с готовыми решениями:

Изменение заголовков запроса с http2 на http
Учусь писать скрипты для анализа различной информации по сайтам. Планирую использовать curl, но пока не знаю как правильно формировать...

Передача заголовков серверу
Есть такой код: InitNetwork() Connection = OpenNetworkConnection("*sample.com*", 80) Get.s="GET...

Отправка GET запроса без установки дополнительных библиотек
Подскажите простенький пример отправки GET запроса к примеру сюда cyberforum.ru/index.php без установки дополнительных библиотек вроде...

14
 Аватар для Уф
890 / 725 / 447
Регистрация: 13.07.2015
Сообщений: 2,277
14.01.2019, 13:14
через get параметр, или в cookie или через post
0
52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789
15.01.2019, 17:59  [ТС]
Цитата Сообщение от Уф Посмотреть сообщение
через post
приведите пожалуйста пример на jquery для POST-запроса при перенаправлении на сервер..

Добавлено через 6 секунд
Цитата Сообщение от Уф Посмотреть сообщение
через post
приведите пожалуйста пример на jquery для POST-запроса при перенаправлении на сервер..
0
 Аватар для Уф
890 / 725 / 447
Регистрация: 13.07.2015
Сообщений: 2,277
15.01.2019, 20:49
создаем форму и отсылаем
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function postToUrl(path, params, method) {
    method = method || "post"; // Устанавливаем метод отправки.
    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);
    form.setAttribute("target", "_blank");
    for(var key in params) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);
        form.appendChild(hiddenField);
    }
    document.body.appendChild(form);
    form.submit();
    form.remove();
}
0
52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789
15.01.2019, 21:23  [ТС]
я попытался выполнить ваш код

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*разбор объекта с деталями успешной аутентификации,
* достается адрес для перенапраления запроса;
* адрес формируется сервером
* uriRedirect - имя ключа одного из свойств JSON, который
* получен от сервера
* Данное имя ключа соответсвует имени поля POJO-класса со стороны
* сервера, который описывает объект, храняищий детали результата
* аутентификации*/
function searchAuthenticationDetails(data) {
 
    var urlRedirect = '';
    var idToken = '';
 
    $.each(data, function (nameKey, value) {
 
        if(nameKey === 'uriRedirect'){
            urlRedirect = value;
            return;
        }
 
            idToken = parsePropertiesJsonForToken(value);
 
    });
    //redirectUri(urlRedirect);
 
    postToUrl(urlRedirect, idToken, "post" );
}
 
function postToUrl(path, params, method) {
    method = method || "post"; // Устанавливаем метод отправки.
    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);
    form.setAttribute("target", "_blank");
    for(var key in params) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);
        form.appendChild(hiddenField);
    }
    document.body.appendChild(form);
    form.submit();
    form.remove();
}
Но в ответ вот такая ошибка (на рис)

вот в этой точке кода

JavaScript
1
form.submit();
Миниатюры
Перенаправление запроса и передача дополнительных заголовков  
0
 Аватар для Уф
890 / 725 / 447
Регистрация: 13.07.2015
Сообщений: 2,277
15.01.2019, 21:28
параметры надо объектом передавать
JavaScript
1
postToUrl(urlRedirect, {idToken: idToken}, "post" );
0
52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789
15.01.2019, 21:37  [ТС]
я так сделал, но в все равно получаю ошибку.

Я не разбирая маркер, передаю его целиков в метод postToUrl(path, params, method), там цикл сам разберет параметры и должен по идее передать в запросе в параметре под именем idToken - маркер безопасности и я его разобрал бы на стороне сервера ...
Миниатюры
Перенаправление запроса и передача дополнительных заголовков   Перенаправление запроса и передача дополнительных заголовков  
0
 Аватар для Уф
890 / 725 / 447
Регистрация: 13.07.2015
Сообщений: 2,277
15.01.2019, 21:40
у тебя в объект вложен другой объект, так функция не понимает

Добавлено через 34 секунды
JavaScript
1
ostToUrl(urlRedirect, {idToken: idToken.authentificationToken}, "post" );
0
52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789
15.01.2019, 22:01  [ТС]
такая же ошибка, более того, в отладчике видно что цикл не смог получить такое значение

а если GET использовать, то какой там синтаксис ?
Миниатюры
Перенаправление запроса и передача дополнительных заголовков  
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
15.01.2019, 22:30
Цитата Сообщение от masli Посмотреть сообщение
Маркер сохраняю с уникальным идентификатором (уникальная строка) и сохраняю в localeStorage
зачем вам новый велосипед
фреймворк должен сессию стартовать и записывать сессионную куку при авторизации и без по надобности
далее во всех запросах(post, get, ajax) с клиента сессионная кука подставляется автоматом
вам же на сервере стоит проверять cokies полученные от клиента и смотреть в таблице сессий или файлах сессий данные о пользователе(госте)
0
52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789
15.01.2019, 23:07  [ТС]
Кроме того, при переходе он открывает сразу 2 одинаковых вкладкb
Цитата Сообщение от Fedor Vlasenko Посмотреть сообщение
проверять cokies
их быть не должно, cokies - не приемлемы

Добавлено через 13 минут
Используется Jwt-маркер, который проверяется несколькими фильтрами безопасности на сервере
0
15.01.2019, 23:33

Не по теме:

Цитата Сообщение от masli Посмотреть сообщение
cokies - не приемлемы
когда все сервисы используют cokies
вы абсолютно не понимаете, что пишете
задумывались когда либо как работают cokies когда они запрещены в браузере
какие фильтры? Чем ssl не угодил

0
52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789
16.01.2019, 09:38  [ТС]
Цитата Сообщение от Fedor Vlasenko Посмотреть сообщение
вы абсолютно не понимаете, что пишете
задумывались когда либо как работают cokies когда они запрещены в браузере
какие фильтры? Чем ssl не угодил
это действительно не по теме, не засоряйте тему
0
 Аватар для Уф
890 / 725 / 447
Регистрация: 13.07.2015
Сообщений: 2,277
16.01.2019, 10:10
попробуй так
JavaScript
1
ostToUrl(urlRedirect, {idToken: JSON.stringify(idToken)}, "post" );
0
52 / 18 / 11
Регистрация: 27.03.2013
Сообщений: 789
17.01.2019, 09:59  [ТС]
Ошибки исчезли, это видно на рис.

Но появилась странная проблема:
после того, как я стал пользоваться таким перенаправлением, то сразу идут автоматически 2 запроса, один за другим и открываются 2 вкладки с одной и той же таблицей.
Кроме того, запрос стал дублироваться если просто щелкнуть в поле консоли в пустом месте.... Снова открывается таблица.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
var selectorDivTable = ".tableEmployees"; /*основной узел, где расположена таблица*/
var selectorTableBody = ".tableBody";
var selectorTableList = ".tableList";
var selectorErrMessage = ".errMessageEmployees"
 
 
$(document).ready(function () {
 
    loadAllEmployees(selectorTableList,selectorTableBody, selectorErrMessage);
 
     // $("table thead").floatThead();
 
 
        /*$(".update").click(function () {
            console.log("Кнопка обновить!")
        });
*/
      // $(".updateJquery").append('<button>').appendChild("Обновить");
 
});
 
 
/*
$(function () {
    $(".tableList").tablesorter({
        sortList: [[0, 0], [1, 0]]
    });
 
    $(".tableList").floatThead();
 
    loadAllEmployees(selectorTableList,selectorTableBody, selectorErrMessage);
 
 
});*/
 
 
 
 
/*Загрузка данных о сотрудниках
* selectorTableList - Селектор в теге table;
*selectorTableBody - Селектор в теге  tbody
* selectorErr - селектор в блоке div, в котором выводятся сообщения об
* ошибках*/
function loadAllEmployees(selectorTableList, selectorTableBody, selectorErr){
    loadTable(selectorTableList, selectorTableBody, selectorErr);
}
 
/*
Данная функция запускает ajax-запрос на сервер, чтобы получить данные
о сотрудниках(целоую таблицу)
empty() - из указанного селектора, очищает содержание выбранных элементов,
т.е. удаляет все узлы-потомки (включая тексты)
из выбранных элементов, все обработчики
событий и внутренние кэш-данные.
Данная команда очищает тело таблицы из указанного селектора,
при обновлении или загрузке данных.
Шапка таблицы остается нетронутой
searchDataFromTable - Функция разбирает данные из рисует таблицу.
*/
 
function loadTable(selectorTableList, selectorTableBody, selectorErr) {
 
    $(selectorTableBody).empty();
 
    $.ajax({
        url: 'api/employee/all',
        method: 'get',
        dataType: 'json',
        success: function (data) {
            searchDataFromTable (data, selectorTableList);
 
        },
        error: function (error) {
 
            messageErr(error,selectorErr);
 
        }
    });
}
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*разбор json-объекта, содержащего данные 
* из таблицы
* data - объект, содержащие данные из таблицы
* selectorTableList - селектор тега <table>  */
function searchDataFromTable (data, selectorTableList) {
    $.each(data, function (index, row) {
        addRow(row, selectorTableList);
    });
}
 
 
/*рисование одной строки в таблице*/
function addRow(row, selectorTableList) {
 
    var listFromRow ='';
    
    /*Получаем данные из json-объект, полученные от клиента.
  Перебор всех имен полей объекта (имен ключей свойств в JSON),
  по имнеи обращаемся к значению свойства;
   имена ключей свойств JSON, имеет соответсвующие назавания
   в POJO-классе на стороне клиента
   */
    $.each(row, function (key, value){
        listFromRow += '<td>' + value + '</td>';
    });
 
    /*Полученные ячейки одной строки, добавляем в теги, обозначющие
    * строку в таблице*/
    var employeeRow = '<tr>' + listFromRow + '</tr>';
 
    /*Получаем точку узла, где находится таблица, а затем получаем
    * доступ к последнему ряду тела таблицы*/
    var employeeList = $(selectorTableList).find("tbody:last");
 
    /*добавляем строку в указанное место*/
    employeeList.append(employeeRow);
}
вот код, который запрашивает данные и рисует таблицу.

а вот это перенаправление

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*разбор объекта с деталями успешной аутентификации,
* достается адрес для перенапраления запроса;
* адрес формируется сервером
* uriRedirect - имя ключа одного из свойств JSON, который
* получен от сервера
* Данное имя ключа соответсвует имени поля POJO-класса со стороны
* сервера, который описывает объект, храняищий детали результата
* аутентификации*/
function searchAuthenticationDetails(data) {
 
    var urlRedirect = '';
    var idToken = '';
 
    $.each(data, function (nameKey, value) {
 
        if(nameKey === 'uriRedirect'){
            urlRedirect = value;
            return;
        }
 
            idToken = parsePropertiesJsonForToken(value);
 
    });
   // redirectUri(urlRedirect);
 
    postToUrl(urlRedirect, {idToken: JSON.stringify(idToken)}, "post" );
}
Отчего это ?
Миниатюры
Перенаправление запроса и передача дополнительных заголовков   Перенаправление запроса и передача дополнительных заголовков  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.01.2019, 09:59
Помогаю со студенческими работами здесь

Передача дополнительных параметров вместе с файлом
Я передаю файл с помощью ajax. Как передать ещё дополнительную информацию например текст? Обычно я это делаю вот так, через параметр data...

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

Перенаправление запроса
привет, у меня есть страничка fix.php на неё приходят get и POST запросы. какой функцией я могу запросить страницу с этимиже...

Передача дополнительных данных в обработчик через json
Здравствуйте! У меня есть два файла: 1 - страница с формой multipart/form-data; 2 - файл-обработчик, которые проверяет введённые...

Передача дополнительных данных в форме обратной связи
Добрый день, подскажите возможно ли автоматически передавать дополнительные данные в форме обратной связи. Есть лендинг, на нем под сотню...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru