HTTP-ответ не отправляет X-Auth-Token в заголовке

Я пытаюсь сделать почтовый запрос к стороннему API.

В этом запросе я должен отправить свое имя пользователя и пароль в заголовке, и он вернет заголовок ответа с X-Auth_token. Проблема в том, что я не получаю X-Auth-Token в заголовке, если я делаю пост с клиента на свой сервер, а затем на API. Если я делаю запрос от Postman непосредственно к URL-адресу API, он работает нормально.

Это код:

СЕРВЕР

app.post("/signin", async (req, res) => {
  console.info("BODY", await req.body);
  try {
    const xToken = await axios.post(loginUrl, {
      headers: {
        "Content-Type": "application/x-www-form-urlencoded",

        "X-Username": req.body.username,
        "X-Password": req.body.password,
      },
    });
    console.info(xToken.headers);

    //res.send(xToken);
  } catch (error) {
    console.info("SERVER Error: ", error.message);
  }
});

КЛИЕНТ

const signin = async () => {
  try {
    const TOKEN = await axios.post("http://localhost:3000/signin", {
      username: "AGU",
      password: "MIOTTI",
    });

    
    console.info("TOKEN", TOKEN);

    return TOKEN;
  } catch (error) {
    console.info("CLIENT Error: ", error.message);
  }
};

signin();

В чем может быть проблема?

некоторые данные почтальона:

Это заголовок ответа, когда вы пытаетесь сделать пост с почтальоном напрямую на https://api.remarkets.primary.com.ar/auth/getToken:

и это заголовок ответа, когда вы отправляете запросы на экспресс-обслуживание:

Можете ли вы поделиться сброшенным экраном почтальона (авторизация, заголовки, тело, URL-адрес POST и статус ответа) со скрытой личной информацией? Это поможет понять, какие auth используются на вашем loginUrl сервере.

Bench Vue 04.02.2023 22:48

@BenchVue Я отредактировал сообщение. Смотрите изображения. Нужно больше?

miouri 04.02.2023 23:16

Спасибо за ваше обновление, я думаю, вы пропустили отправку части Body(x-www-form-urlencoded)` списка ключей/значений и получили часть Body со статусом (статус 200?) Еще раз, я проверил документацию по API. apihub.primary.com.ar Можете указать authentication страницу? Это должно помочь формату X-Username/X-Password (база 64 или нет). В некоторых документах показан пример curl для получения токена. Это увеличит процент, на который вы получите ответ.

Bench Vue 04.02.2023 23:31

@BenchVue idk, если я вас хорошо понимаю, но вы говорите, что я не отправлял контент типа x-www-form-urlencoded? Честно говоря, я не понимаю объяснения. Извините, я нуб.. XD

miouri 04.02.2023 23:36

Я не могу проверить ваш токен api.primary.com.ar, но я отвечу с помощью аналогичного веб-сайта (spotify). Вы можете применить свою проблему. Дайте мне 10 минут, я постараюсь ответить на ваш вопрос.

Bench Vue 04.02.2023 23:42

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

Bench Vue 04.02.2023 23:57
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
6
101
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сторона сервера в виде файла server.js

const express = require("express")
const axios = require('axios')
const cors = require("cors")
const bodyParser = require('body-parser')
const corsOptions = {
    exposedHeaders: 'Authorization',
};

const app = express()
app.use(cors(corsOptions))
app.use(bodyParser())

const loginUrl = 'https://api.remarkets.primary.com.ar/auth/getToken'

app.post("/signin", async (req, res) => {
    console.info("BODY", await req.body);
    const response = await axios.post(
        url = loginUrl,
        '',
        config = {
            headers: {
                "X-Username": req.body.username,
                "X-Password": req.body.password,
            }
        })
    return res.send(response.headers["x-auth-token"])
});

app.listen(3000, () => { console.info("Listening on :3000") })

Сторона Клиета как client.js файл

const axios = require('axios')
const signin = async () => {
    try {
        const response = await axios.post("http://localhost:3000/signin", {
            username: "<your id>",
            password: "<your password>",
        });
        return Promise.resolve(response.data);
    } catch (error) {
        return Promise.reject(error);
    }
};

signin()
    .then(token => {
        console.info('token is : ' + token);
    })
    .catch(error => {
        console.info(error.message);
    });

Установить зависимости

npm install express axios cors body-parser

Подтвержденные зависимости

$ npm ls --depth=0
@ D:\temp\working
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]

Сначала запустите сервер

node server.js

Запустить клиент позже

node client.js

Результат в клиенте

Рекомендации

Axios получают доступ к полям заголовка ответа

Невозможно получить доступ к свойству JSON с дефисом "-"

Хорошо, я возобновляю. Первый шаг: мне нужно, чтобы почтальоны получили ваши полномочия. Можете ли вы подтвердить три пункта? Во-первых, элемент заголовка, я добавил два элемента (X-Username/X-Password) из заголовка Postman по умолчанию. Правильный? Во-вторых, мне нужен раздел тела, можете ли вы показать свою часть тела почтальона? Список ключей/значений x-www.form-urlencooded, у меня нет информации. В-третьих, можете ли вы показать часть тела вашего ответа. Он покажет токен и статус. Последний элемент вы можете удалить свои учетные данные. Я скопировал это.

Bench Vue 05.02.2023 00:53

В вашем почтовом запросе на loginUrl вам нужно добавить в заголовок x-username и x-password. Тело пусто.

miouri 05.02.2023 01:12

Хорошо, я пытаюсь отправить сообщение, но Body не отвечает, просто 200 OK, Вы получили токен доступа?

Bench Vue 05.02.2023 01:13

Реакция тела тоже пуста. Когда вы пытаетесь напрямую сделать запрос с почтальоном, заголовок ответа имеет X-Auth-Token. Но ничего с моей программой

miouri 05.02.2023 01:15

Я думаю, что мы запутались. Когда вы пытаетесь с почтальоном сделать публикацию на api.remarkets.primary.com.ar/auth/getToken с X-Username и X-Password в заголовке, все работает нормально. Заголовок ответа имеет X-Auth_token. Когда вы пытаетесь отправить сообщение с почтальоном на сервер в режиме экспресс, в заголовке ответа нет токена X-Auth.

miouri 05.02.2023 01:17

Я не понимаю, это означает, что «заголовок ответа имеет X-Auth_token».

Bench Vue 05.02.2023 01:18

один комментарий, API: api.remarkets.primary.com.ar/auth/getToken является сторонним... Каждый ваш запрос, я не получаю никакой информации...

miouri 05.02.2023 01:22

Хорошо, я могу получить информацию X-Auth-Token в заголовке ответа Почтальона. Теперь первый шаг сделан. Позвольте мне попробовать по коду.

Bench Vue 05.02.2023 01:29

Другие вопросы по теме